今回はRubyに限らずプログラミングを学ぶ上で非常に重要となる「変数と定数」について、ご紹介していきます。
変数とは・・・
オブジェクトを一時的に格納しておく箱で、オブジェクトを識別するために利用します。
言葉だけでは理解が難しいかと思いますので、まずは変数を利用した例を挙げてみたいと思います。
[code lang="ruby"] test = "Hello World" #変数を定義 number = 1 [/code]
変数 = 格納するオブジェクトという形で変数を定義します。
この場合、「“Hello World”」という文字列オブジェクトが、「test」という変数に代入され、 「1」という数値オブジェクトが、「number」という変数に代入されました。
変数を「箱」と考えると、下図のようなことになります。
★このように、変数にはどんなオブジェクトでも代入することができます!
定義した変数を用いたコードを書く
今回も、前回と同様に「irb」を使ってやっていきます。
はじめに、「irb」を起動します。
[code lang="ruby"] $ irb # irbを起動 irb(main):001:0> # ここにプログラムを書く [/code]
先ほどの挙げた例の通り、「“Hello World”」という文字列オブジェクトを、「test」という変数に代入し、 「1」という数値オブジェクトを、「number」という変数に代入します。
[code lang="ruby"] irb(main):001:0> test = "Hello World" => "Hello World"
irb(main):002:0> number = 1 => 1
irb(main):003:0> puts test Hello World => nil
irb(main):004:0> puts number 1 => nil [/code]
※変数の名前や代入するオブジェクトは自由に設定可能です。
その後、putsメソッドを使って「test」を呼び出すと、「変数test」に代入された「“Hello World”」が出力され、「number」を呼び出すと、「変数number」に代入された「1」が出力されます。
この時、返り値が「nil」となっています。 「nil」は、何も代入されていないことを意味します。
変数に代入したはずなのに・・・と思いますが、putsの返り値は「nil」と決まっているためであり、変数の定義が上手くいっていないわけではありません!
また、変数はプログラム中に何度でも代入(変更)できる、 つまり、1度オブジェクトを代入した後も、別のオブジェクトを代入することが可能です。
[code lang="ruby"] irb(main):001:0> test = "Hello World" => "Hello World"
irb(main):002:0> puts test Hello World => nil
irb(main):003:0> test = "ruby on rails" => "ruby on rails"
irb(main):004:0> puts test ruby on rails => nil [/code]
「“Hello World”」という文字列オブジェクトを、「test」という変数に代入し、putsメソッドを使って「test」を呼び出すと、「変数test」に代入された「“Hello World”」が出力されます。
その後、「“Hello World”」という文字列オブジェクトが代入された、「test」という変数に 「”ruby on rails”」という文字列オブジェクトを代入すると、変数は上書きされ、 再びputsメソッドを使って「test」を呼び出すと、「“ruby on rails”」が出力されます。
このように、★変数はプログラム中に何度でも変更することが可能です!
★文字列を代入した後に、数値を代入することも可能です! (もちろん、数値を代入した後に、文字列を代入することも可能です。)
[code lang="ruby"] irb(main):001:0> test = "Hello World" => "Hello World"
irb(main):002:0> puts test Hello World => nil
irb(main):003:0> test = "ruby on rails" => "ruby on rails"
irb(main):004:0> puts test ruby on rails => nil
irb(main):005:0> test = 100 => 100
irb(main):006:0> puts test 100 => nil [/code]
頻繁に利用する、かつ文字数の多いオブジェクトを変数として定義して利用することで、 毎回長いコードを書く手間も省けて便利ですね。 変数には、
- ローカル変数
- グローバル変数
- インスタンス変数
- クラス変数
の4種類があります。
ここまででご紹介してきた変数は「ローカル変数」で、最も一般的な変数です。
「ローカル変数」は、英小文字または「 _ 」で始まる識別子で、定義された時点で使用可能になります。 その他の種類に関しましては、必要となった時に覚えるくらいで良いかと思いますので、ここでは簡単に触れる程度にしておきます!
「グローバル変数」 $で始まる変数。プログラムのどこからでも、同じ名前であれば同一の変数として扱われる。
「インスタンス変数」 @で始まる変数。同じインスタンス内であれば、メソッド定義を超えて参照できる。
「クラス変数」 @@で始まる変数。クラス定義の中で定義され、同じクラス内でのみ参照できる。
定数とは・・・
オブジェクトを一時的に格納しておく箱であることは、変数と同じですが、変数との大きな違いは、 変数は「プログラム中に何度でも変更することが可能」であるのに対し、 定数は「一度オブジェクトを代入したら、再代入することができない」 ということです。
また、定数を定義する時には名前の最初を大文字にするという決まりがあり、 また識別子を全て英大文字にするという慣習があります。 Rubyは識別子の先頭が大文字である変数を定数として認識します。
[code lang="ruby"] irb(main):001:0> CONST = "Hello World" => "Hello World"
irb(main):002:0> puts CONST Hello World => nil [/code]
変数と同様に、 定数 = 格納するオブジェクト という形で定数を定義します。
ここでは、「“Hello World”」という文字列オブジェクトが、「CONST」という定数に代入され、CONST」を呼び出すと、「“Hello World”」が出力されました。
一度値を代入した定数に、再び値を代入しようとすると、警告メッセージが表示されます。
[code lang="ruby"] irb(main):001:0> CONST = "Hello World" => "Hello World"
irb(main):002:0> puts CONST Hello World => nil
irb(main):003:0> CONST = "ruby on rails" (irb):3: warning: already initialized constant CONST (irb):1: warning: previous definition of CONST was here => "ruby on rails"
irb(main):004:0> puts CONST ruby on rails => nil [/code]
変数や定数の名前は自由に設定可能ですが、意味が分かりやすいように名前をつけるようにしましょう!
過去記事
【未経験からのRuby on Rails – 第1回】楽しく書けるプログラミング言語 “Ruby” とは 【未経験からのRuby on Rails – 第2回】Rubyのプログラムを書いてみる(Mac)