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を参照してください。