変数 | 名前の付け方 | 例 | スコープ |
ローカル変数 | 小文字で始める | abc, foo | メソッド内で有効 |
インスタンス変数 | @で始める | @abc, @foo | 呼び出したインスタンスの中で有効 |
クラス変数 | @@で始める | @@abc, @@foo | クラスの中で有効。クラス が同じなら、 |
インスタンスが異なっても有効 | |||
グローバル変数 | $で始める | $abc, $foo | プログラム全体で有効 |
定数 | 大文字で始める | Abc, Foo | クラス変数と同じ |
------------ program ------------ n = 10 def var1(k) for n in 0..k do printf("for文中の n の値は %d \n",n) end printf("defの(forの外)の n の値は %d \n",n) end var1(5) printf("defの外の n の値は %d \n",n) ------------ end ---------------- 実行結果は、以下のとおり、。 $ ruby var_local1.rb for文中の n の値は 0 for文中の n の値は 1 for文中の n の値は 2 for文中の n の値は 3 for文中の n の値は 4 for文中の n の値は 5 defの(forの外)の n の値は 5 defの外の n の値は 10同じ ``n''でも位置によって異なる。 メソッドの外には影響を与えない。
------------ program ------------ class Variable def var_1 a = 10 @b = a + 10 printf(" var_1 の中の a = %d \n", a) end def var_2 a = 20 printf(" var_2 の中の a = %d \n", a ) printf(" var_2 の中の @b = %d \n", @b) end end c1 = Variable.new # c1を"Variable" クラスとして定義。 # これにより"c1"インスタンスが生成される。 c2 = Variable.new # c2を"Variable" クラスとして定義。 # これにより"c2"インスタンスが生成される。 c1.var_1 # "c1" インスタンスの "var_1" が実行される。 c1.var_2 # "c1" インスタンスの "var_2" が実行される。 c2.var_2 # "c2" インスタンスの "var_2" が実行される。 ------------ end ---------------- 実行結果は、以下のとおり。 $ ruby var_instans1.rb var_1 の中の a = 10 var_2 の中の a = 20 var_2 の中の @b = 20 var_2 の中の a = 20 var_2 の中の @b = 0c1もc2も同じクラスに属しているが、インスタンスは異なる。 すなわち ``c1''の中で使われているインスタンス変数は ``c1''の中で全て同じ 変数として扱われる。 となる。 同様に ``c2''の中で使われているインスタンス変数は ``c2'' の中で 同じ変数として扱われることとなる。
------------ program ------------ class Variable def var_1 a = 10 @@b = a + 10 # 前とはこの部分が異なる。 printf(" var_1 の中の a = %d \n", a) end def var_2 a = 20 printf(" var_2 の中の a = %d \n", a ) printf(" var_2 の中の @@b = %d \n", @@b) # 前とはこの部分が異なる。 end end c1 = Variable.new # c1を"Variable" クラスとして定義。 # これにより"c1"インスタンスが生成される。 c2 = Variable.new # c2を"Variable" クラスとして定義。 # これにより"c2"インスタンスが生成される。 c1.var_1 # "c1" インスタンスの "var_1" が実行される。 c1.var_2 # "c1" インスタンスの "var_2" が実行される。 c2.var_2 # "c2" インスタンスの "var_2" が実行される。 ------------ end ---------------- 実行結果は、以下のとおり。 $ ruby var_class1.rb var_1 の中の a = 10 var_2 の中の a = 20 var_2 の中の @@b = 20 var_2 の中の a = 20 var_2 の中の @@b = 20最後の値が異なる。 ``c1.var_1'' で、クラス変数が変化したので、異なるインスタンスである ``c2.var_2''の変数も変化したからである。