1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Rubyの変数の定義(ローカル変数)

Rubyの変数の定義をまめてみました。

変数は数字や文字などのデータを格納する箱。

その箱を呼び出すことで、箱の中身のデータを読み込んだり、取り出したり、追加したりできます。

変数にはローカル変数、インスタンス変数、クラス変数、グローバル変数、定数があります。

変数の種類によって使い方が異なります。

ローカル変数

命名規則

  • 英小文字または_が文字の先頭に使用できる
  • 英数字または_で構成される
student = "Taro"
student_2 = "Jiro"
_student_3 = "Sabu"

ただし、数字が先頭にくるとエラー

4_student = "fourth"
#=> syntax error

スコープ

最初に代入が使用された位置から、その代入を含むブロックまたはメソッドの定義の終わりまで

まず変数を定義

studet = 'Taro'

変数を呼び出してみる

puts student
Taro
 => nil  #当然よびだせる

ブロックはどうか?

3.times do |n|
  puts student
end
Taro
Taro
Taro
=> 3 

インスタンスメソッドから呼び出せるか試してみる

def students
 puts student   #インスタンス変数を作ってその中でstudentを呼び出してみる
end
sutudents
NameError: undefined local variable or method `student' for main:Object

classメソッドは?

class Students
  puts student   #当たり前だけどエラーになる
end
NameError: undefined local variable or method `student' for Students:Class

インスタンスメソッド、クラスの中で変数を定義する。

def students
  student = 'Taro'
end
puts students
Taro
=> nil

class MedicalStudents
 student = 'Hanako'
 puts student
end
gakusei =  MedicalStudents.new  #とやってclassは定義できるが、インスタンスを作成したところで呼び出せない
#試しにクラスの外からstudentを呼び出してみる
puts student
NameError: undefined local variable or method `student' for main:Object  

インスタンスメソッドはメソッドを呼び出せば変数を呼べるが、classの中に変数を定義してインスタンスを作成しても呼び出せず、当たり前だけど直接呼び出せるはずもなく。

クラスのなかでローカル変数をつかうには

class MedicalStudents
  def name=(name)
    student = name
    puts student
  end
end
a = MedicalStudents.new  #インスタンスを作成
a.name ="Hanako"  
Hanako
=> "Hanako"

インスタンスを作成し、インスタンスの中で変数を代入すれば呼び出せる。

ただし他のインスタンスメソッドには呼びだせない

class MedicalStudents
  def name=(name)
    student = name
  end
  def students
    puts student
  end
end
b = MedicalStudents.new   #インスタンスを作成
b.name ="Yoshiko" 
b.students
NameError: undefined local variable or method `student' for #<MedicalStudents:0x00007f83f50ad360>

というわけでローカル変数のまとめ
ローカル変数を呼び出すには

  • ローカル変数を直接呼び出す
  • ブロック変数で呼び出す
  • インスタンスメソッドの中でローカル変数を定義して、インスタンスメソッドを呼び出す
  • クラスとインスタンスメソッドをつくり、インスタンスをつくる。インスタンスごとに変数を代入して呼び出す。

ローカル変数で無理やり出力させる方法は以上でした。

次回はインスタンス変数に続く

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?