Ruby 変数
変数は、任意のプログラムで使用できる任意のデータを保持するための格納場所です。
Ruby は5種類の変数をサポートしています。
- 通常は小文字またはアンダースコアで始まる:変数(Variable)。
$$ で始まる:グローバル変数(Global variable)。@@ で始まる:インスタンス変数(Instance variable)。@@@@ で始まる:クラス変数(Class variable)。クラス変数は継承チェーン全体で共有されます。- 大文字で始まる:定数(Constant)。
あなたは前の章でこれらの変数についておおまかに理解しました。この章では、これら5種類の変数について詳しく解説します。
Ruby グローバル変数
グローバル変数は $ で始まります。初期化されていないグローバル変数の値はnilであり、-w オプションを使用すると警告が発生します。
グローバル変数に値を代入するとグローバル状態が変更されるため、グローバル変数の使用は推奨されません。
以下の例はグローバル変数の使い方を示しています。
例
試してみる »
ここでは、$global_variable はグローバル変数です。これにより以下の結果が生成されます:
注意:Ruby では、変数または定数の前に # 文字を置くことで、任意の変数または定数の値にアクセスできます。
全局变量在 Class1 中输出为 10 全局变量在 Class2 中输出为 10
Ruby インスタンス変数
インスタンス変数は @ で始まります。初期化されていないインスタンス変数の値はnilであり、-w オプションを使用すると警告が発生します。
以下の例はインスタンス変数の使い方を示しています。
例
試してみる »
ここでは、@cust_id、@cust_name、@cust_addr はインスタンス変数です。これにより以下の結果が生成されます:
Customer id 1 Customer name John Customer address Wisdom Apartments, Ludhiya Customer id 2 Customer name Poul Customer address New Empire road, Khandala
Ruby クラス変数
クラス変数は @@ で始まり、メソッド定義内で使用する前に初期化する必要があります。
初期化されていないクラス変数を参照するとエラーが発生します。クラス変数は、それを定義したクラスまたはモジュールのサブクラスまたはサブモジュールで共有して使用できます。
-w オプションを使用すると、クラス変数を再定義した場合に警告が発生します。
以下の例はクラス変数の使い方を示しています。
例
試してみる »
ここでは、@@no_of_customers はクラス変数です。これにより以下の結果が生成されます:
Total number of customers: 1 Total number of customers: 2
Ruby ローカル変数
ローカル変数は小文字またはアンダースコア _ で始まります。ローカル変数のスコープは、class、module、def、または do から対応する終わりまで、または左中括弧から右中括弧 {} までです。
初期化されていないローカル変数を呼び出すと、引数なしのメソッド呼び出しとして解釈されます。
初期化されていないローカル変数への代入は、変数宣言としても扱われます。変数は現在のスコープが終了するまで存在し続けます。ローカル変数のライフサイクルは、Ruby がプログラムを解析するときに決定されます。
上記の例では、ローカル変数は id、name、addr です。
Ruby 定数
定数は大文字で始まります。クラスまたはモジュール内で定義された定数は、そのクラスまたはモジュールの内部からアクセスでき、クラスまたはモジュールの外部で定義された定数はグローバルにアクセスできます。
定数はメソッド内で定義できません。初期化されていない定数を参照するとエラーが発生します。すでに初期化された定数に代入すると警告が発生します。
例
試してみる »
ここでは、VAR1 と VAR2 は定数です。これにより以下の結果が生成されます:
第一个常量的值为 100 第二个常量的值为 200
Ruby 疑似変数
これらは特別な変数で、ローカル変数の外観を持ちますが、動作は定数のように振る舞います。これらの変数には値を代入できません。
- self:現在のメソッドのレシーバオブジェクト。
- true:true を表す値。
- false:false を表す値。
- nil:undefined を表す値。
- __FILE__:現在のソースファイルの名前。
- __LINE__:現在の行のソースファイル内での番号。