スコープが異なると、変数を利用できない
関数を定義しても、スコープが違う変数を利用することができない。
異なるスコープの変数を利用するためには、引数を使う必要がある。その仕組をまとめておこうと思う。
サンプルとして、「好きなラーメン屋を出力する」というプログラムを書く。
def favoriteLamenShop(name)
puts "#{name}が大好き。"
end
favoriteLamenShop("二郎")
→出力は 「二郎が大好き。」となる。
プログラムの流れ
- 関数の宣言部分はまずスルーされるため、初めに読まれるのはfavoriteLamenShop("二郎")の部分。
- すると、"二郎"という引数が、宣言したfavoriteLamenShopの引数(name)で読み込まれる。
- 引数nameに入った「二郎」は、「puts "#{name}が大好き。"」のところで、nameに入れられる。
- 結果、「二郎が大好き」が出力される。
本引数と仮引数の名前は異なっても構わない。
関数を読み出す時の引数を本引数、関数を宣言するときの引数を仮引数と言う。
これらの名前が異なっても問題はない。
今度は、好きなラーメン屋をユーザーに入力してもらう、というプログラムを書いてみる。
def favoriteLamenShop(name)
puts "#{name}が大好き"
end
input = gets.to_s
favoriteLamenShop(input)
本引数はname, 仮引数はinputとなっており、名称が異なる。
だが問題なくプログラムは、ユーザーが入力した値を関数の結果として返す。
例えば「天下一品」と入力すれば、「天下一品が大好き」と出される。
注意点としては、関数の宣言時に、関数内では引数の名前を同じにすることくらい。
以上。