アマグラミング

プログラミング初心者が勉強したことを復習とメモがてら書いているだけです。

(79)ローカル変数とグローバル変数

Rubyには以下の変数があります。

 

ローカル変数

グローバル変数

インスタンス変数

クラス変数

 

変数がどれかは名前でわかります。

アンダーバー(_)か小文字のアルファベットで始まるのがローカル変数

頭文字が$で始まるのがグローバル変数

@で始まるのがインスタンス変数

@@で始まるのがクラス変数

 

他に見た目が変数に見えるが、挙動が変数とは違う疑似変数がある。

 

ローカル変数は普段使ってきた変数ですね

有効範囲が局所的なので

関係のない範囲に同じ名前の変数名があっても別物です。

 

ローカル変数は最初に代入されたときに初期化をされます。

なにも代入されていないローカル変数を参照するとエラーが起こります。

 

 

グローバル変数は逆にどこにあっても同じ名前は同じ変数を表すので

他のファイルを自分のプログラムに組み込んだとき、同じグローバル変数名があると

思いもよらない挙動をしたり、修正やプログラムの流れが難解になるので

好まれません。

 

ちょっとやってみましょう。

 

z3というファイル名で以下のコードを

 

$a = 0
a = 0

require_relative "z4"

p $a
p a

 

z4というファイル名で以下のコードを用意しました。

 

$a = 1
a = 1

 

これでz3を実行してみます。

 

f:id:tiroru17:20170629103727p:plain

 

このようにグローバル変数は同じ変数として扱われていることがわかります。