Ruby-variables

提供:Dev Guides
移動先:案内検索

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]をご覧ください。