Ruby変数の詳細分析
変数とは、任意のプログラムで使用できる任意のデータを保持する記憶場所である。
Ruby では、5 種類の変数をサポートしています。
- 一般的な小文字、アンダースコアのスターター。変数です。
- で始まる。グローバル変数。
- で始まる。インスタンス変数。
- 始点:クラス変数 クラス変数は、継承チェーン全体で共有される
- 大文字で始まる 定数(Constant)
Rubyグローバル変数
グローバル変数は $ で始まります。初期化されていないグローバル変数の値は nil であり、-w オプションを使用すると警告が発生します。
グローバル変数に値を代入すると、グローバルな状態が変化するので、グローバル変数の使用は推奨されません。
次の例は、グローバル変数の使い方を示しています。
#! /usr/bin/ruby
# -*- coding: UTF-8 -*-
$global_variable = 10
class class1
def print_global
puts "Global variable output in Class1 is #$global_variable"
end
end
class class2
def print_global
puts "The global variable is output in Class2 as #$global_variable"
end
end
class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global
この場合、$global_variableはグローバル変数です。この場合、次のような結果になります。
グローバル変数はClass1では10と出力されます。
クラス2でのグローバル変数の出力は10
注)Rubyでは、変数や定数の前に「#」を付けると、その値にアクセスすることができます。
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 object
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
# Called methods
cust1.display_details()
cust2.display_details()
ここで、@cust_id、@cust_name、@cust_addrはインスタンス変数です。これにより、以下のような結果が得られます。
顧客ID 1
顧客名 John
お客様住所 Wisdom Apartments, Ludhiya
顧客ID 2
お客様名 Poul
お客様の住所 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 object
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
# Call method
cust1.total_no_of_customers()
cust2.total_no_of_customers()
ここで、@@no_of_customersはクラス変数です。これは以下のような結果になります。
顧客の総数: 1
顧客数合計:2
Rubyのローカル変数
ローカル変数は小文字のアルファベットかアンダースコアの_で始まります。ローカル変数のスコープは、class、module、def、do から対応する末尾まで、または左中括弧から右中括弧 {} までとなります。
初期化されていないローカル変数が呼び出された場合、引数のないメソッドの呼び出しと解釈されます。
初期化されていないローカル変数に値を代入することは、変数宣言として扱うこともできます。変数は、現在のドメインが終了するまで存続する。ローカル変数のライフサイクルは、Ruby がプログラムを解析するときに決定されます。
上の例では、ローカル変数が id、name、addr となっています。
Rubyの定数
定数は大文字で始まります。クラスやモジュールの内部で定義された定数は、そのクラスやモジュールの内部からアクセスでき、クラスやモジュールの外部で定義された定数は、グローバルにアクセスすることができます。
メソッド内部で定数を定義することはできません。初期化されていない定数を参照すると、エラーが発生します。すでに初期化されている定数に値を代入すると、警告が発生します。
#! /usr/bin/ruby
# -*- coding: UTF-8 -*-
class Example
VAR1 = 100
VAR2 = 200
def show
puts "The value of the first constant is #{VAR1}"
puts "The value of the second constant is #{VAR2}"
end
end
# Create an object
object=Example.new()
object.show
ここで、VAR1 と VAR2 は定数です。これにより、以下のような結果が得られます。
最初の定数の値は100
2番目の定数の値は200です
Rubyの擬似変数
これは、ローカル変数の外観を持ちながら、定数のように振る舞う特殊な変数です。これらの変数に値を代入することはできません。
- self: 現在のメソッドのレシーバーオブジェクト。
- true: 真を表す値。
- falseです。falseの値を表す。
- nil: 未定義(undefined)の値を表す。
- __FILE__。現在のソースファイルの名前です。
- __LINE__: ソースファイル内の現在の行番号。
Rubyの変数については、Scripting Houseの他の関連記事を参照してください。
関連
-
win7でrubyのソースコードからコンパイルしてインストールする方法
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Ruby Hash ハッシュ型 基本操作のメソッド一覧 まとめ
-
Rubyのinstance_evalメソッドとclass_evalとの比較
-
RubyのXMLデータパースライブラリ「Nokogiri」の高度な使い方
-
Rubyのデザインパターン開発におけるProxyパターンの利用について
-
Builderビルダーパターンを用いたRubyデザインパターンプログラミング例
-
Ruby on Railsのルーティング設定に関するいくつかのアドバイス
-
Rubyメタプログラミングの注目すべき点
-
Rubyでの正規表現の使い方基本ガイド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
モンキーパッチのプログラミングスタイルとRubyでの利用について
-
RubyのHash構造体の基本操作のまとめ
-
RubyのProcクラスとProc.newメソッドの使用法
-
RubyのブロックオブジェクトProcの詳細解説
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
Rubyのgemパッケージマネージャの使い方とbundlerによる複数バージョンのgemの管理
-
文字列のマッチングと置換のためのRuby正規表現
-
Rubyのデザインパターン。プログラミングにおけるアピアランスパターンの応用
-
RubyGnome2 ライブラリを用いた GTK 環境での Ruby GUI プログラミングの基本的な考え方
-
Rubyの変数参照に関するいくつかの注意点