Ruby-variables
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はグローバル変数です。 これは、次の結果を生成します-
注-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ローカル変数
ローカル変数は、小文字または_で始まります。 ローカル変数のスコープは、クラス、モジュール、def、doから対応する終わりまで、またはブロックの開き中括弧から閉じ中括弧\ {}までの範囲です。
初期化されていないローカル変数が参照されると、引数のないメソッドの呼び出しとして解釈されます。
初期化されていないローカル変数への割り当ては、変数宣言としても機能します。 変数は、現在のスコープの終わりに達するまで存在し始めます。 ローカル変数の有効期間は、Rubyがプログラムを解析するときに決定されます。
上記の例では、ローカル変数はid、name、およびaddrです。
ルビー定数
定数は大文字で始まります。 クラスまたはモジュール内で定義された定数はそのクラスまたはモジュール内からアクセスでき、クラスまたはモジュール外で定義された定数はグローバルにアクセスできます。
メソッド内で定数を定義することはできません。 初期化されていない定数を参照すると、エラーが発生します。 すでに初期化されている定数に割り当てを行うと、警告が生成されます。
#!/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
ルビーの擬似変数
これらはローカル変数のように見えますが、定数のように動作する特別な変数です。 これらの変数に値を割り当てることはできません。
- self -現在のメソッドの受信者オブジェクト。
- true -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、2進数の場合は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
注-クラスとオブジェクトについては、このチュートリアルの別の章で説明しています。
浮動小数点数
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
シーケンス*#\ {expr} *を使用して、任意のRuby式の値を文字列に置き換えることができます。 ここで、exprは任意のルビー式です。
#!/usr/bin/ruby -w
puts "Multiplication Value : #{24*60*60}";
これは、次の結果を生成します-
Multiplication Value : 86400
バックスラッシュ表記
以下は、Rubyがサポートするバックスラッシュ表記法のリストです-
Notation | Character represented |
---|---|
\n | Newline (0x0a) |
\r | Carriage return (0x0d) |
\f | Formfeed (0x0c) |
\b | Backspace (0x08) |
\a | Bell (0x07) |
\e | Escape (0x1b) |
\s | Space (0x20) |
\nnn | Octal notation (n being 0-7) |
\xnn | Hexadecimal notation (n being 0-9, a-f, or A-F) |
\cx, \C-x | Control-x |
\M-x | Meta-x (c |
0x80) | \M-\C-x |
Meta-Control-x | \x |
Ruby文字列の詳細については、link:/ruby/ruby_strings [Ruby Strings]をご覧ください。
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配列の詳細については、link:/ruby/ruby_arrays [Ruby Arrays]を参照してください。
ルビーハッシュ
リテラルRuby Hashは、キーと値の間にカンマまたはシーケンス⇒のいずれかを使用して、キーと値のペアのリストを中括弧の間に配置することによって作成されます。 末尾のコンマは無視されます。
例
#!/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_hashes [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の範囲の詳細については、link:/ruby/ruby_ranges [Ruby Ranges]をご覧ください。