> Ruby – 変数、定数、およびリテラルRuby – 変数、定数、およびリテラル~RUBY入門〜RUBYTUTORIAL〜 – ネットワークエンジニアチュートリアル

Ruby – 変数、定数、およびリテラルRuby – 変数、定数、およびリテラル~RUBY入門〜RUBYTUTORIAL〜

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

次のページ

スポンサーリンク

ネットワークエンジニアになりたければ下記から無料相談会に参加!
なんと無料で授業を受けれてエンジニアになれます

投稿日:2017-10-03 更新日:

執筆者: