1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Ruby変数の詳細分析

2022-01-03 21:43:19

変数とは、任意のプログラムで使用できる任意のデータを保持する記憶場所である。

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

  • 一般的な小文字、アンダースコアのスターター。変数です。
  • で始まる。グローバル変数。
  • で始まる。インスタンス変数。
  • 始点:クラス変数 クラス変数は、継承チェーン全体で共有される
  • 大文字で始まる 定数(Constant)

Rubyグローバル変数

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

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

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

#! /usr/bin/ruby
# -*- coding: UTF-8 -*-
 
$global_variable = 10
class class1
 def print_global
   puts "Global variable output in Class1 is #$global_variable"
 end
end
class class2
 def print_global
   puts "The global variable is output in Class2 as #$global_variable"
 end
end
 
class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

この場合、$global_variableはグローバル変数です。この場合、次のような結果になります。

グローバル変数はClass1では10と出力されます。
クラス2でのグローバル変数の出力は10

注)Rubyでは、変数や定数の前に「#」を付けると、その値にアクセスすることができます。

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
 
# Create object
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
 
# Called methods
cust1.display_details()
cust2.display_details()

ここで、@cust_id、@cust_name、@cust_addrはインスタンス変数です。これにより、以下のような結果が得られます。

顧客ID 1
顧客名 John
お客様住所 Wisdom Apartments, Ludhiya
顧客ID 2
お客様名 Poul
お客様の住所 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
 
# Create object
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
 
# Call method
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 "The value of the first constant is #{VAR1}"
    puts "The value of the second constant is #{VAR2}"
  end
end
 
# Create an object
object=Example.new()
object.show

ここで、VAR1 と VAR2 は定数です。これにより、以下のような結果が得られます。

最初の定数の値は100
2番目の定数の値は200です

Rubyの擬似変数

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

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

Rubyの変数については、Scripting Houseの他の関連記事を参照してください。