前書き
Rubyに関して新たな知見を得たので忘却録として記事に残します。
以下のコードを見て introduceメソッドの出力結果が 「僕ドラえもん」か「野比のび太」どちらが出力されるかわからない方はこのまま記事を読み進めてください。
class User def name "僕ドラえもん" end def introduce(name) puts name end end user = User.new user.introduce("野比のび太") #出力結果は何?
introduce()メソッド内のnameはメソッドとして認識される?それともnameというローカル変数として認識される?
結論
上記の例の場合introduce内のnameは「ローカル変数」として認識され出力結果は「野比のび太」と出力される。
ローカル変数とメソッドの見分け方
ローカル変数として認識される場合は以下のような時.
- メソッド内で変数が定義されている
class User def name "僕ドラえもん" end def introduce name = "野比のび太" #ローカル変数定義 puts name end end user = User.new user.introduce 出力結果 野比のび太
- メソッドの引数になっている場合
class User def name "僕ドラえもん" end def introduce(name) #メソッドの引数になっている時ローカル変数として処理される puts name end end user = User.new user.introduce("野比のび太") 出力結果 野比のび太
メソッドとして認識される場合は以下の時
- ローカル変数の条件以外
class User def name "僕ドラえもん" end def introduce puts name end end user = User.new user.introduce #出力結果 僕ドラえもん
まとめ
- ローカル変数と同名のメソッド名を定義しない方が可読性が高まりる