English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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 "顧客のID @cust_id"
      puts "顧客の名前 @cust_name"
      puts "顧客の住所 @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 "顧客のID @cust_id"
      puts "顧客の名前 @cust_name"
      puts "顧客の住所 @cust_addr"
    end
    def total_no_of_customers()
       @@no_of_customers += 1
       puts "顧客の総数: #@@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はクラス変数です。これにより以下の結果が得られます:

顧客の総数: 1
顧客の総数: 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 "二つ目の定数の値は #{VAR2"
   end
end
 
# オブジェクトの作成
object=Example.new()
object.show

ここでは、VAR1 と VAR2 これは定数です。以下の結果が得られます:

一つ目の定数の値は 100
二つ目の定数の値は 200

Ruby 仮変数

それらは特別な変数で、ローカル変数の外観を持っていますが、常量のような動作をします。これらの変数に値を割り当てることができません。

  • self: 現在のメソッドのリシーバーオブジェクトです。

  • true: true を表す値です。

  • false: false を表す値です。

  • nil: undefined を表す値です。

  • __FILE__: 現在のソースファイルの名前です。

  • __LINE__: 現在の行がソースファイルの中での番号です。