プロのカウンセラーがキャリアの悩みを解決! 無料キャリア相談はこちらから

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

作成: 2016.09.12 更新: 2018.03.09

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

読むだけでIT転職が有利になる限定資料はこちら

この記事を見てるあなたはRubyを学び始めてまだ間もないかもしれません。
Rubyには変数の種類がいくつかあり、「これは何の変数なんだっけ」
となることありますよね?でもご安心ください。Rubyの変数について忘れてしまってもこの記事に戻ってくれば何度でも理解できます。
今まで曖昧だった変数の種類を理解することは、Rubyでのプログラミング上達には必ず必要なのでここで理解しましょう!

 
出典:photo AC

1.Rubyの変数についての基本

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

1-1 Rubyの変数の種類

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

・ローカル変数

・グローバル変数

・インスタンス変数

・クラス変数

・擬似変数

1-2 変数のスコープについて

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

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

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

変数のスコープについてもっと詳しく知りたい方はこちら。

参考URL:Rubyにおけるスコープのおはなし

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

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

2-1 ローカル変数について

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

human = Human.new
human.myName

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

 
 

2-2 グローバル変数について

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

$name = "テック二郎"

class Human
myName
$name = "テック太郎"
"./sample"#ここで別のファイルを読み込み、その中で$nameの値を変更してみる
 $name
end
end

human = Human.new

human.myName #出力結果は「テック二郎」でした

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

 

2-3 ローカル変数とグローバル変数の違い、まとめ

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

コロナ禍でも安心してエンジニア転職

テックキャンプ エンジニア転職は、未経験から約99%がエンジニア転職を実現しているプログラミングスクールです。 テックキャンプはコロナ禍でも安心して受講が可能。「徹底したサポート」「やりきれる学習環境」を自宅で学べるオンラインスタイルと感染防止対策を徹底した教室受講のどちらでも提供しています。 キャリアに悩む前に、まずはテックキャンプの無料カウンセリングを受けてみませんか?

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

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

3-1 インスタンス変数について

  • 定義の仕方
    @を先頭に記述します。
  • 定義の例
    @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でインスタンスごとに違う値を持てることがわかります。

 

3-2 クラス変数について

  • 定義の仕方
    @@を先頭に記述します。
  • 定義の例
    @@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の値が共有されているのがわかります。

 

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

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

 

この記事のハッシュタグ

4.擬似変数について

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

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

 

4-1 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と記述することもできます。

 

4-2 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なのでその中身が実行されます。

 

4-3 nilについて

nilはオブジェクトが存在していないことを表すために使用されます。
何もオブジェクトが代入されていない変数にはnilが代入されているとして扱われます。

5.最後に

以上が変数についての基本でした。
あなたがこれからRubyを上達するために変数の違いを理解することは非常に重要です。
その中でも定義の仕方や変数のスコープに違いがあるのでしっかり押さえましょう!
Rubyの変数についてもっと詳しく知りたい方はこちらどうぞ!

Ruby公式サイト

https://www.ruby-lang.org/ja/

 

それでは引き続き学習頑張ってください!

 

自宅にいながら、プロのカウンセラーにキャリア相談!

テックキャンプ エンジニア転職は、未経験からのエンジニア・Webデザイナー転職を実現するスクールです。転職成功率は99.0%。※2019年8月末時点。学習完了後、当社の転職支援利用者の転職成功率

テックキャンプでは、オンラインでカウンセリングや学習サービスを提供しています。

オンラインでも、テックキャンプならではの「徹底したサポート」と「やりきらせる学習環境」は変わりません。オンラインでプログラミングを習得した方のインタビューはこちら

キャリアに悩んだら、ビデオ通話で無料オンラインカウンセリング(キャリア相談)を受けてみませんか?オンラインカウンセリングのやり方は簡単で、5分もあれば準備が完了します。

まずはカウンセリングから、ぜひご利用ください。

無料カウンセリングの詳細はこちら

この記事を書いた人