Ruby 変数

変数は、任意のプログラムで使用できる任意のデータを保持するための格納場所です。

Ruby は5種類の変数をサポートしています。

  • 通常は小文字またはアンダースコアで始まる:変数(Variable)。
  • $$ で始まる:グローバル変数(Global variable)。
  • @@ で始まる:インスタンス変数(Instance variable)。
  • @@@@ で始まる:クラス変数(Class variable)。クラス変数は継承チェーン全体で共有されます。
  • 大文字で始まる:定数(Constant)。

あなたは前の章でこれらの変数についておおまかに理解しました。この章では、これら5種類の変数について詳しく解説します。

Ruby グローバル変数

グローバル変数は $ で始まります。初期化されていないグローバル変数の値はnilであり、-w オプションを使用すると警告が発生します。

グローバル変数に値を代入するとグローバル状態が変更されるため、グローバル変数の使用は推奨されません。

以下の例はグローバル変数の使い方を示しています。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global_variable = 10 class Class1 def print_global puts "グローバル変数は Class1 で #$global_variable として出力されます" end end class Class2 def print_global puts "グローバル変数は Class2 で #$global_variable として出力されます" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global

試してみる »

ここでは、$global_variable はグローバル変数です。これにより以下の結果が生成されます:

注意:Ruby では、変数または定数の前に # 文字を置くことで、任意の変数または定数の値にアクセスできます。

全局变量在 Class1 中输出为 10
全局变量在 Class2 中输出为 10

Ruby インスタンス変数

インスタンス変数は @ で始まります。初期化されていないインスタンス変数の値はnilであり、-w オプションを使用すると警告が発生します。

以下の例はインスタンス変数の使い方を示しています。

例

#!/usr/bin/ruby class Customer def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end end #オブジェクトを作成 cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") #メソッドを呼び出し cust1.display_details() cust2.display_details()

試してみる »

ここでは、@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 オプションを使用すると、クラス変数を再定義した場合に警告が発生します。

以下の例はクラス変数の使い方を示しています。

例

#!/usr/bin/ruby class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Total number of customers: #@@no_of_customers" end end #オブジェクトを作成 cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") #メソッドを呼び出し cust1.total_no_of_customers() cust2.total_no_of_customers()

試してみる »

ここでは、@@no_of_customers はクラス変数です。これにより以下の結果が生成されます:

Total number of customers: 1
Total number of customers: 2

Ruby ローカル変数

ローカル変数は小文字またはアンダースコア _ で始まります。ローカル変数のスコープは、class、module、def、または do から対応する終わりまで、または左中括弧から右中括弧 {} までです。

初期化されていないローカル変数を呼び出すと、引数なしのメソッド呼び出しとして解釈されます。

初期化されていないローカル変数への代入は、変数宣言としても扱われます。変数は現在のスコープが終了するまで存在し続けます。ローカル変数のライフサイクルは、Ruby がプログラムを解析するときに決定されます。

上記の例では、ローカル変数は id、name、addr です。

Ruby 定数

定数は大文字で始まります。クラスまたはモジュール内で定義された定数は、そのクラスまたはモジュールの内部からアクセスでき、クラスまたはモジュールの外部で定義された定数はグローバルにアクセスできます。

定数はメソッド内で定義できません。初期化されていない定数を参照するとエラーが発生します。すでに初期化された定数に代入すると警告が発生します。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Example VAR1 = 100 VAR2 = 200 def show puts "最初の定数の値は #{VAR1} です" puts "2番目の定数の値は #{VAR2} です" end end #オブジェクトを作成 object=Example.new() object.show

試してみる »

ここでは、VAR1 と VAR2 は定数です。これにより以下の結果が生成されます:

第一个常量的值为 100
第二个常量的值为 200

Ruby 疑似変数

これらは特別な変数で、ローカル変数の外観を持ちますが、動作は定数のように振る舞います。これらの変数には値を代入できません。

  • self:現在のメソッドのレシーバオブジェクト。
  • true:true を表す値。
  • false:false を表す値。
  • nil:undefined を表す値。
  • __FILE__:現在のソースファイルの名前。
  • __LINE__:現在の行のソースファイル内での番号。
その他の拡張