##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>
というわけでローカル変数のまとめ
ローカル変数を呼び出すには
- ローカル変数を直接呼び出す
- ブロック変数で呼び出す
- インスタンスメソッドの中でローカル変数を定義して、インスタンスメソッドを呼び出す
- クラスとインスタンスメソッドをつくり、インスタンスをつくる。インスタンスごとに変数を代入して呼び出す。
ローカル変数で無理やり出力させる方法は以上でした。
次回はインスタンス変数に続く