Ruby-変数、定数、リテラル

変数は、任意のプログラムで使用される任意のデータを保持するメモリ位置です。

Rubyでサポートされている変数には5つのタイプがあります。前の章でも、これらの変数について簡単に説明しました。この章では、これら5種類の変数について説明します。

Rubyグローバル変数

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

グローバル変数に割り当てると、グローバルステータスが変更されます。グローバル変数の使用はお勧めしません。彼らはプログラムを不可解にします。

これは、グローバル変数の使用法を示す例です。

#!/usr/bin/ruby

$global_variable = 10
class Class1
   def print_global
      puts "Global variable in Class1 is #$global_variable"
   end
end
class Class2
   def print_global
      puts "Global variable in Class2 is #$global_variable"
   end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

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

NOTE − Rubyでは、変数または定数の直前にハッシュ(#)文字を置くことで、任意の変数または定数の値にアクセスできます。

Global variable in Class1 is 10
Global variable in Class2 is 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

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
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

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
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

class Example
   VAR1 = 100
   VAR2 = 200
   def show
      puts "Value of first Constant is #{VAR1}"
      puts "Value of second Constant is #{VAR2}"
   end
end

# Create Objects
object = Example.new()
object.show

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

Value of first Constant is 100
Value of second Constant is 200

Ruby疑似変数

これらは、ローカル変数のように見えますが、定数のように動作する特別な変数です。これらの変数に値を割り当てることはできません。

  • self −現在のメソッドのレシーバーオブジェクト。

  • true −真を表す値。

  • false −falseを表す値。

  • nil −未定義を表す値。

  • __FILE__ −現在のソースファイルの名前。

  • __LINE__ −ソースファイルの現在の行番号。

Ruby基本リテラル

Rubyがリテラルに使用するルールはシンプルで直感的です。このセクションでは、すべての基本的なRubyリテラルについて説明します。

整数

Rubyは整数をサポートしています。整数から-2の範囲とすることができる30〜2 30-1または-2 62 2 62-1。この範囲内の整数はクラスFixnumのオブジェクトであり、この範囲外の整数はクラスBignumのオブジェクトに格納されます。

オプションの先行記号、オプションのベースインジケータ(8進数の場合は0、16進数の場合は0x、またはバイナリの場合は0b)を使用して整数を記述し、その後に適切なベースの数字の文字列を続けます。数字列ではアンダースコア文字は無視されます。

ASCII文字に対応する整数値を取得したり、疑問符を前に付けてシーケンスをエスケープしたりすることもできます。

123                  # Fixnum decimal
1_234                # Fixnum decimal with underline
-500                 # Negative Fixnum
0377                 # octal
0xff                 # hexadecimal
0b1011               # binary
?a                   # character code for 'a'
?\n                  # code for a newline (0x0a)
12345678901234567890 # Bignum

NOTE −クラスとオブジェクトについては、このチュートリアルの別の章で説明しています。

浮動小数点数

Rubyは浮動小数点をサポートしています。それらも数字ですが、小数が付いています。浮動小数点数はFloatクラスのオブジェクトであり、次のいずれかになります。

123.4                # floating point value
1.0e6                # scientific notation
4E20                 # dot not required
4e+20                # sign before exponential

文字列リテラル

Ruby文字列は、単に8ビットバイトのシーケンスであり、Stringクラスのオブジェクトです。二重引用符で囲まれた文字列では置換と円記号の表記が可能ですが、一重引用符で囲まれた文字列では置換ができず、\\と\ 'に対してのみ円記号の表記が可能です。

#!/usr/bin/ruby -w

puts 'escape using "\\"';
puts 'That\'s right';

これにより、次の結果が生成されます-

escape using "\"
That's right

シーケンスを使用して、任意のRuby式の値を文字列に置き換えることができます #{ expr }。ここで、exprは任意のルビー式にすることができます。

#!/usr/bin/ruby -w

puts "Multiplication Value : #{24*60*60}";

これにより、次の結果が生成されます-

Multiplication Value : 86400

バックスラッシュ表記

以下は、Rubyでサポートされているバックスラッシュ表記のリストです。

表記 表現された文字
\ n 改行(0x0a)
\ r キャリッジリターン(0x0d)
\ f 改ページ(0x0c)
\ b バックスペース(0x08)
\ a ベル(0x07)
\ e エスケープ(0x1b)
\ s スペース(0x20)
\ nnn 8進表記(nは0〜7)
\ xnn 16進表記(nは0-9、af、またはAF)
\ cx、\ Cx Control-x
\ Mx Meta-x(c | 0x80)
\ M- \ Cx Meta-Control-x
\バツ 文字x

Ruby文字列の詳細については、Ruby文字列を参照してください。

Ruby配列

Ruby配列のリテラルは、角括弧の間にコンマで区切られた一連のオブジェクト参照を配置することによって作成されます。末尾のコンマは無視されます。

#!/usr/bin/ruby

ary = [  "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
   puts i
end

これにより、次の結果が生成されます-

fred
10
3.14
This is a string
last element

Ruby配列の詳細については、Ruby配列を参照してください。

Rubyハッシュ

リテラルのRubyハッシュは、キーと値のペアのリストを中括弧の間に配置し、キーと値の間にコンマまたはシーケンス=>を使用して作成されます。末尾のコンマは無視されます。

#!/usr/bin/ruby

hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
   print key, " is ", value, "\n"
end

これにより、次の結果が生成されます-

red is 3840
green is 240
blue is 15

Rubyハッシュの詳細については、Rubyハッシュを参照してください。

Rubyの範囲

範囲は、開始と終了の値のセットである間隔を表します。範囲は、s..eおよびs ... eリテラルを使用するか、Range.newを使用して作成できます。

..を使用して構築された範囲は、最初から最後まで包括的に実行されます。...を使用して作成されたものは、最終値を除外します。イテレータとして使用する場合、範囲はシーケンス内の各値を返します。

範囲(1..5)は、1、2、3、4、5の値を含むことを意味し、範囲(1 ... 5)は、1、2、3、4の値を含むことを意味します。

#!/usr/bin/ruby

(10..15).each do |n| 
   print n, ' ' 
end

これにより、次の結果が生成されます-

10 11 12 13 14 15

Ruby Rangesの詳細については、RubyRangesを参照してください。