Contents
Ruby – 変数、定数、およびリテラル
変数は、任意のプログラムが使用するデータを保持するメモリの場所です。
Rubyには5種類の変数がありますのでこの章で説明をしていきます。ちなみに変数は下記のように文字に数字を代入してあらわすことをいいます。
X=0 Y=0 X=5 Y=X+10
Rubyのグローバル変数
グローバル変数は$で始まります。初期化されていないグローバル変数の値はnilで、警告は-wオプションで生成されます。
グローバル変数への代入は、グローバルステータスを変更します。グローバル変数を使用することは推奨されません。
下記はグローバル変数の使用例を示します。
#!/usr/bin/ruby $global_variable = 10 class Class1 #クラス def print_global #def 関数を定義するメソッド puts "#Global in Class1 is #Global" #プリントする end #クラス終了 end #def 関数を定義するメソッドが終了 class1obj = Class1.new class1obj.print_global
$ global_variableはグローバル変数です。これにより、次の結果が生成されます。
Global in Class1 is Global
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 # オブジェクト = 物をつくりましょう cust1 = Customer.new("1", "たける", "大阪, でんがなアパート") cust2 = Customer.new("2", "けんじ", "東京, 八王子ヒルズ1号棟") # メソッドを呼び出し cust1.display_details() cust2.display_details() # プリントアウト行に戻って表示されるんですね
ここで、@cust_id、@cust_nameおよび@cust_addrはインスタンス変数です。これにより、次の結果が生成されます。
Customer id 1 Customer name たける Customer address 大阪, でんがなアパート Customer id 2 Customer name けんじ Customer address 東京, 八王子ヒルズ1号棟
Rubyクラス変数
クラス変数は@@で始まり、メソッド定義で使用する前に初期化する必要があります。
初期化されていないクラス変数を参照すると、エラーが発生します。クラス変数は、クラス変数が定義されているクラスまたはモジュールの子孫間で共有されます。
以下例です
#!/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 # オブジェクト生成 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はクラス変数です。これにより、次の結果が生成されます。
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 – trueを表す値
- false – falseを表す値
- nil – 未定義を表す値。
- __FILE__ – 現在のソースファイルの名前。
- __LINE__ – ソースファイル内の現在の行番号。
Ruby基本リテラル
リテラルにRubyが使用するルールは、単純で直感的です。このセクションでは、すべての基本的なRubyリテラルについて説明します。
整数値
Rubyは整数をサポートします。整数-2の範囲とすることができる30 2 30-1または-2 62〜2 62-1。この範囲内の整数はFixnumクラスのオブジェクトであり、この範囲外の整数はBignumクラスのオブジェクトに格納されます。
オプションの先行記号、オプションの基本インジケーター(0は8進数、0xは16進数、0bは2進数)を使用して整数を作成し、その後に適切な基数の数字列を続けます。下線文字は数字列で無視されます。
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
任意の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 | オクタル表記(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 | キャラクターx |
これはのちに説明します
Rubyの配列
Ruby Arrayのリテラルは、角括弧の間にコンマで区切った一連のオブジェクト参照を置いて作成されます。末尾のカンマは無視されます。
例
#!/usr/bin/ruby ary = [ "たなか", 10, 3.14, "これは文字列", "さいごの要素", ] ary.each do |i| #each do = ary要素(fredとかを繰り返す。) puts i end
これにより、次の結果が生成されます。
たなか 10 3.14 これは文字列 さいごの要素
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ーレンジ
Rangeは区間を表します。開始点と終了点を持つ値の集合です。レンジは、s..eとs …リテラルを使用して、または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
次のページ