Written by Kasumi

Rubyで変数の種類とそれぞれの有効範囲(スコープ)について

Rubyで使える変数の種類を知りたい。

また、変数の有効範囲(スコープ)を知りたい。

本記事ではこのような悩みを解決。

スコープの概要と変数の種類について解説します。

スコープとは

スコープとは、変数の有効範囲を示します。

有効範囲を超えてしまうとその変数は使えません。

変数の種類によって使える有効範囲が決まってます。

ローカル変数

def message()
  # ローカル変数
  text = "こんにちは"
  puts  text
end

#ここでは使えない
#puts text

message()

ローカル変数のコード例です。

ローカル変数は定義されたメソッドやブロック内で使用される変数です。

ローカル変数の使い方は以下の通りです。

任意の変数名 = 値

任意の変数名を決め、イコール(=)で変数に格納するデータを代入します。

スコープの範囲として、特定のメソッド・ブロック内でローカル変数を定義した場合、その変数は同じメソッド・ブロック内でしか使う事が出来ません。

インスタンス変数

class Introduction
  def initialize(name)
    #インスタンス変数
      @name = name
  end
 
  def message()
      puts "こんにちは#{@name}です。"
  end
end
 
#インスタンス化
Introduction.new("kasumiblog").message()
Introduction.new("kasumi").message()

#出力結果
#こんにちはkasumiblogです。
#こんにちはkasumiです。

インスタンス変数を使ったコード例です。

インスタンス変数は同じクラスのインスタンス間で共有できる変数になります。

使い方は以下の通りです。

@変数名= 値

変数名の先頭に@を付けます。

initializeメソッド(初期化)と併用して、インスタンス事に固有の異なる値を変数に設定できます。

クラス変数

class Defalt
  # クラス変数
  @@num = 2
  def self.num()
      @@num
  end
end

class Sum < Defalt
  def self.sum()
    @@num + @@num
  end
end

puts "#{Defalt.num()}"
puts "#{Defalt.num()}+#{Defalt.num()}は#{Sum.sum()}"

#出力結果
#2
#2+2は4

クラス変数は、クラス内で作成されたすべてのオブジェクトで共有できる変数になります。

使い方は以下の通りです。

@@変数名= 値

変数名の先頭に@を二つ付けます。

インスタンス変数との違いとして、変数の値はクラスで共有されるすべてのオブジェクトで同じです。

グローバル変数

$name = "kasumi"

def message()
    puts "こんにちは、#{$name}です"
end

message()

グローバル変数はクラスやメソッド内外関わらず、どこでも使用できる変数になります。

使い方は以下の通りです。

$変数名 = 値

変数名の先頭に$を付けます。

Rubyで使う変数の中で、スコープとして最も広い範囲で使われる変数です。

まとめ

Rubyでスコープの概要と変数の種類について紹介しました。

以上で解説を終わります。

目次

関連記事

Ruby

【Ruby】getsメソッドの用途・使い方について解説

2022.07.26
2291
Ruby

Rubyで定数やメソッドをまとめてmodule化する方法

2022.08.18
1147
Ruby

【Ruby】配列要素を追加・上書き・削除する方法

2022.07.25
2219
Ruby

Rubyのメソッドで引数にデフォルト値を指定する方法【キーワード引数を使おう】

2022.08.13
712