転職実績No.1🔰エンジニアスクール
転職実績No.1🔰エンジニアスクール

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

更新: 2021.07.09

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

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

でもご安心ください。

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

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

Rubyの変数についての基本

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

Rubyの変数の種類

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

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

変数のスコープについて

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

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

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

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

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

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

ローカル変数について

  • 定義の仕方:小文字もしくは_で始めます。
  • 定義の例: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/

↑目次へ戻る

【転職実績No.1👑】年収アップと自由な働き方を実現したいならITエンジニア転職!

こんな希望はありませんか?

  • もっと年収アップできる仕事がしたい
  • 時間や場所に縛られず自由に働きたい
  • 専門スキルで手に職をつけたい

という方は、ITエンジニア転職がおすすめです

テックキャンプなら、完全未経験🔰でも大丈夫!プログラミング学習〜エンジニア転職支援、副業案件獲得まで個別にサポートします👌

さらに給付金活用で受講料最大70%OFF

※2020年12月時点 3.テックキャンプ エンジニア転職は経済産業省の第四次産業革命スキル習得講座の認定も受けており、条件を満たすことで支払った受講料の最大70%(最大56万円)が給付金として支給されます

興味がある方は、以下よりIT転職のプロにキャリアのお悩み相談から始めてみましょう!

まずは無料で相談してみる

この記事を書いた人

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

Advertisement