テックキャンプ無料カウンセリング
資料請求はこちら

【Ruby変数】もう迷わせない!代表的な変数と特徴を徹底解説

更新: 2021.07.09

>>No1エンジニア養成プログラム テックキャンプ

プログラミングを仕事にして収入を上げる方法

この記事を見てるあなたはRubyを学び始めてまだ間もないかもしれません。

Rubyには変数の種類がいくつかあり、「これは何の変数なんだっけ」となることありますよね?

でもご安心ください。

Rubyの変数について忘れてしまってもこの記事に戻ってくれば何度でも理解できます。

今まで曖昧だった変数の種類を理解することは、Rubyでのプログラミング上達には必ず必要なのでここで理解しましょう!

Rubyの変数についての基本

ここではRubyの変数にどんな種類があるのかと変数の有効な範囲である変数スコープについて見ていきましょう!

Rubyの変数の種類

Rubyにおける変数の種類は次の通りです。

  • ローカル変数
  • グローバル変数
  • インスタンス変数
  • クラス変数
  • 擬似変数

変数のスコープについて

スコープとは変数の有効な範囲です。

その変数がスコープの外に出てしまえば参照できず、たとえ名前が同じであっても違う変数として扱われます。

変数の種類が違えばスコープの範囲も違いますのでしっかりと押さえておきましょう!

変数のスコープについてもっと詳しく知りたい方は「Rubyにおけるスコープのおはなし」が参考になります。

10年後も食べていける職業

エンジニアは、今もっとも注目を集めている職業の1つ。市場価値の高いエンジニアにキャリアチェンジできれば、あなたの人生の選択肢は飛躍的に増えることでしょう。 3,200名以上のIT転職を支援したテックキャンプが、未経験からエンジニアになる方法を解説! 資料はこちらから無料ダウンロードが可能。※2016年9月1日〜2021年5月14日の累計実績。

ローカル変数とグローバル変数について

ここでは有効な範囲の小さいローカル変数と有効な範囲の大きいグローバル変数について見ていきましょう!

ローカル変数について

  • 定義の仕方:小文字もしくは_で始めます。
  • 定義の例:name
  • 変数のスコープ:その変数が宣言されたブロック、メソッド定義、クラス定義の終わりまで。定義された場所でしか参照できない極めて局所的な変数。
  • スコープの例:

class Human
name = “テック太郎”
def myName
puts name
end
end
human = Human.new
human.myName

myNmaeメソッドの外でname変数を宣言しても、myNameメソッドの中からは参照できないのでエラーが出ます。

グローバル変数について

  • 定義の仕方:$を先頭に記述します。
  • 定義の例:$name
  • 変数のスコープ:グローバル変数はプログラムのどこからでも参照でき、同じ名前であれば必ず同じ変数として扱われます。
    注意点としてグローバル変数は一般的に好まれません。
    プログラム全体のどこからでも変更できるため、大きなプログラムではグローバル変数を利用することによってプログラムが必要以上に複雑になったりプログラムの流れを追ったり修正を加えたりするのが大変になったりするからです。
  • スコープの例:


$name = "テック二郎"
class Human
myName
$name = "テック太郎"
"./sample"#ここで別のファイルを読み込み、その中で$nameの値を変更してみる
$name
end
end
human = Human.new
human.myName #出力結果は「テック二郎」でした

出力された$nameの値はテック二郎に変わっていたので、別のファイルでも、読み込んで自分のプログラムの一部として実行すると、グローバル変数は参照できていて値を変更できているということがわかります。

ローカル変数とグローバル変数の違い まとめ

  • ローカル変数は変数の有効な範囲(変数のスコープ)が局所的(ローカル)で、
    有効な範囲を越えていれば同じ名前の変数でも違う変数として扱われる。
  • グローバル変数はプログラム中のどこで使われても、同じ名前であれば、必ず同じ変数として扱われる。

クラス変数とインスタンス変数について

ここではインスタンス間でも値が共有されるクラス変数とインスタンス毎に値の異なるインスタンス変数を見ていきましょう!

インスタンス変数について

  • 定義の仕方:@を先頭に記述します。
  • 定義の例:@name
  • 変数のスコープ:ローカル変数はメソッドごとに異なる変数として扱われましたが、インスタンス変数は同じインスタンス内であればメソッドの定義を越えてその値を参照したり変更したりできます。
  • スコープの例:

class Human
def initialize(name)
@name = name
end
def myName
puts "私の名前は#{@name}です。"
end
end


human1 = Human.new("テック太郎")
human1.myName #"私の名前はテック太郎です。"
human2 = Human.new("テック二郎")
human2.myName #"私の名前はテック二郎です。"

initializeメソッドの中で宣言した@name変数をmyNameメソッドの中からも参照できることがわかります。

さらにhuman1とhuman2でインスタンスごとに違う値を持てることがわかります。

クラス変数について

  • 定義の仕方:@@を先頭に記述します。
  • 定義の例:@@name
  • スコープ:そのクラスのすべてのインスタンスから参照したり値を変更したりできます。
  • スコープの例:

class Human
def initialize(name)
@@name = name
end
def myName
puts "私の名前は#{@@name}です。"
end
end
human1 = Human.new("テック太郎")
human1.myName #"私の名前はテック太郎です。"
human2 = Human.new("テック二郎")
human2.myName #"私の名前はテック二郎です。"
human1.myName #"私の名前はテック二郎です。"

異なるインスタンス間でも@@nameの値が共有されているのがわかります。

インスタンス変数とクラス変数の違い まとめ

  • クラス変数はクラスメソッド内とインスタンスメソッド内、両方で使える。
  • クラス変数はクラスで1つの値で、どのインスタンスで使っても同じ値。
  • インスタンス変数はインスタンスメソッド内でのみ、使用可能。
  • インスタンス変数はインスタンスごとに値が異なる。

擬似変数について

通常の変数以外に疑似変数と呼ばれる特殊な変数があります。擬似変数の値は変更することができません。

擬似変数に何か代入しようとすると文法エラーになります。ここではself,true,false,nilを見ていきます。

selfについて

インスタンスメソッドの中で、メソッドのレシーバ自身を参照するにはselfという特別な変数を使用します。

class Human
def name
puts "私の名前はテック太郎です。"
end
def sayHello
self.name
end
end
human = Human.new()
human.sayHello

sayHelloメソッドで使用しているself.nameはsayHelloメソッドを呼んだ時のレシーバを参照しています。
つまりhumanインスタンスです。

またレシーバを省略してメソッドを呼ぶと暗黙的にselfをレシーバとします。そのため上記のコードのself.nameはnameと記述することもできます。

true,falseについて

例えばif文などで条件式を記述するとします。

「AとBが等しい」とか「AがBより大きい」などの条件が条件式に記述されます。

この式が評価され条件として成立する場合true、成立しない場合にfalseを返します。

x = 1
y = 2
if x < y == true
puts "true"
elsif x < y == false
puts "false"
end

上記のコードの場合はxよりyの方が大きいのでtrueが返ってきます。

なのでif文でtrueとfalseの場合分けをしてみると当然tureなのでその中身が実行されます。

nilについて

nilはオブジェクトが存在していないことを表すために使用されます。

何もオブジェクトが代入されていない変数にはnilが代入されているとして扱われます。

この記事のハッシュタグ

Rubyの変数と特徴 まとめ

以上が変数についての基本でした。

あなたがこれからRubyを上達するために変数の違いを理解することは非常に重要です。

その中でも定義の仕方や変数のスコープに違いがあるのでしっかり押さえましょう!

Rubyの変数についてもっと詳しく知りたい方はこちらどうぞ!

Ruby公式サイト:https://www.ruby-lang.org/ja/

↑目次へ戻る

はじめての転職、何から始めればいいか分からないなら

「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料無料プレゼント中!

例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?

資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。

限定資料を無料プレゼント中

この記事を書いた人

あなたの理想のキャリアに合わせた、テックキャンプの3つのサービス

Advertisement