8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyの変数とスコープについて

Last updated at Posted at 2019-09-22

はじめに

  • 筆者は先週の土曜日(2019/9/14)から、Rubyの学習を始めた修行中の身です。
     間違っている箇所があれば、ご指摘くださいませ。

変数について

  • 変数とは、オブジェクトの入れ物、またはオブジェクトを識別する名札のようなもの
  • よく例えられる概念としては「箱」
  • 箱に名前(変数名)をつけて、その中に中身(オブジェクト)を入れる
# サンプルコード

# 「word」という名前で変数を定義し、その中に"Hello World"という文字列を代入
word = "Hello World"

# 以下の通り、word変数を呼び出すと「Hello World」が表示された!
puts word
=> Hello World

スコープについて

  • スコープは変数の有効範囲、範囲を超えるとその変数は使えなくなる
  • スコープは変数の種類によって範囲が異なる
  • 変数には、以下の種類がある(本当はもっとあるらいしいが省略
  • ローカル変数
  • インスタンス変数
  • クラス変数
ローカル変数
  • スコープは、定義されたメソッド内でのみ使用可能
  • メソッドの壁を超えられない
# 有効範囲の検証
def test
 name = "kazuki"
end

puts test
# =>kazuki

### 範囲外 
def test1
 return name
end

puts test1
# エラー発生、nameはtest関数の中でのみ有効
# => test.ruby:6:in `test1': undefined local variable or method `name' for main:Object (NameError)

インスタンス変数
  • 頭に @ をつけることで定義できる
  • スコープは、インスタンス内ならどこでも使用可能
  • インスタンス毎に値を持てる
  • 同じクラス内ならメソッドの壁を超えて参照可能
# 有効範囲の検証
class Test
  def initialize(name)
    @name = name     #インスタンス変数を定義
  end

  def puts_name
    puts @name
  end
end

test1 = Test.new("kazuki")
test2 = Test.new("toshiro")
test1.puts_name
# =>kazui
test2.puts_name
# =>toshiro
クラス変数
  • 頭に @@ をつけることで定義できる
  • スコープは、クラス内ならどこでも使用可能
  • インスタンス変数はインスタンス毎に値を持てるが、クラス変数はクラス内で1つの値を持つ
# 有効範囲の検証
class Test
  def initialize(name)
    @@name = name     #クラス変数を定義
  end

  def puts_name
    puts @@name
  end
end

test1 = Test.new("kazuki")
test2 = Test.new("toshiro")
test1.puts_name
# =>toshiro
test2.puts_name
# =>toshiro

# 解説
# クラス変数はクラス内で1つの値を持つため、
# test2 = Test.new("toshiro")で@@nameにtoshiroを代入したあとは、
# どのインスタンスで呼び出してもtoshiroが表示される。
8
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?