前 | 目次 | 次 |
Ruby変数を理解する | Ruby Number Classes and Conversions |
さて、Ruby における変数の基本を説明しましたが、次の課題は Ruby の変数スコープを説明することです。
変数スコープとは?
スコープはプログラム中のどこに変数がアクセスできるか定義しているもの。 Rubyには、ローカル、グローバル、インスタンス、クラスという4種類の変数スコープがあります。 また、Rubyには定数型が1つあります。 各変数型は、以下の表のように変数名の先頭に特殊文字を用いて宣言する。
名前の先頭 | 変数の範囲 |
---|---|
$ |
グローバル変数 |
@ |
インスタンス変数 | または _ |
ローカル変数 |
|
定数 | @@ |
クラス変数 |
なお、この他に。 Rubyには、値を割り当てることができない擬似変数が2つあります。 初期化されていない変数に割り当てられるnilと、現在実行中のオブジェクトを指すselfです。
Detecting the Scope of a Ruby Variable
言うまでもなく、変数の名前を見ればそのスコープは分かります。 しかし、時には、プログラム的にスコープを見つける必要があります。 変数のスコープを調べる便利なテクニックは、defined?メソッドを使用することです。defined?は、参照された変数のスコープを返し、その変数が現在のコンテキストで定義されていない場合は nil を返します:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Ruby ローカル変数
ローカル変数は、それが宣言されているコード構成に対してローカルなものです。 例えば、メソッドやループ内で宣言されたローカル変数は、そのループやメソッドの外側でアクセスすることはできません。 ローカル変数の名前はアンダースコアか小文字で始めなければならない。 例:
loopcounter = 10_LoopCounter = 20
Ruby グローバル変数
Ruby のグローバル変数は、宣言された場所に関係なく Ruby のプログラムのどこからでもアクセスすることができます。 グローバル変数の名前はドル記号($)を前につける。 例えば、
$welcome = "Welcome to Ruby Essentials"
グローバル変数の使用は強く推奨されません。 グローバル変数の問題は、プログラムのコードのどこからでも見えるだけでなく、アプリケーションのどこからでも変更可能なことです。
しかし、Ruby 開発者として、Ruby 環境に関する情報を得るために、多くの定義済みグローバル変数が利用できることを知っておくと便利です。 これらの各変数の簡単な概要は、次の表に含まれています。
変数名 | 変数値 |
---|---|
|
最新のエラー位置 |
$_ |
|
$. |
インタプリタが最後に読んだ行番号 |
$& |
正規表現で最後にマッチした文字列 |
$~ |
正規表現の最後に一致したものです。 部分式の配列 |
$ n |
最後のマッチの n 番目の部分式 ($~ と同じ) |
$= |
ケース・サイズ。不感症フラグ |
$/ |
入力レコードの区切り文字 |
$\ |
出力レコードの区切り文字 separator |
|
現在実行中の Ruby スクリプトファイル名 |
$* |
|
$$ |
RubyインタプリタのプロセスID |
$? |
最後に実行した子の終了ステータス |
例えばキーボードから入力するために getメソッドを実行してみましょう。 を参照し、入力された値を取得するために$_変数を参照します。
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
あるいは、Ruby インタープリタのプロセス ID を見つけることができます。
irb(main):007:0> $$=> 17403
Ruby クラス変数
クラス変数とは、クラスのすべてのインスタンス間で共有される変数のことです。 これは、このクラスからインスタンス化されたすべてのオブジェクトに対して、1つの変数の値だけが存在することを意味する。 これは、1 つのオブジェクト インスタンスが変数の値を変更すると、その新しい値は本質的に他のすべてのオブジェクト インスタンスに対して変更されることを意味します。
クラス変数について考える別の方法は、単一のクラスのコンテキスト内のグローバル変数として考えることです。 クラス変数は作成時に初期化されなければなりません。 たとえば、
@@total = 0
Ruby インスタンス変数
インスタンス変数は、その値がオブジェクトの特定のインスタンスにローカルであることを除いて、クラス変数と似ています。 たとえば、クラスに @total というインスタンス変数がある場合、オブジェクトの 1 つのインスタンスが @total の現在の値を変更すると、変更は変更を行ったオブジェクトのみに局所的に適用されます。
Ruby では、インスタンス変数は、変数名の前に @ 記号を 1 つ付けて宣言されます。 Ruby は多くのプログラミング言語と異なり、定数値を宣言した後に変更することができますが、インタープリタは警告メッセージを出して少し抗議します。 クラスまたはモジュールの外部で宣言された定数は、グローバル スコープが割り当てられます。
前 | 目次 | 次 |
Rubyの変数を理解する | Rubyの数値クラスと変換 |