引数と仮引数の関係性について学んだのでアウトプット
今回作成するプログラムは非常に単純コンソール上に入力した名前の後ろに”さん”を付けて返り値を出すプログラム
例:コンソール上に 青木 と打ったら返り値は 青木さん となる。
'さん'付けしたい名前を本引数として’namae_san’メソッドに飛ばしその中の仮引数を操作し、元の処理の流れに戻した上で、再度表示する。
本引数と仮引数の関係性について実験するためにまずは失敗例から記載する
def namae_san(namae)
namae = "#{namae}" + "さん"
end
puts "さん付けしたい名前を入力してください"
namae = gets.chomp
namae_san(namae)
puts namae
=> 実行結果 ”とも”と入力した場合 ”とも” ※さん付けされていない
上記はユーザーからの入力をnamaeに代入してnamae_sanメソッドに本引数として引き渡している。
その後代入された値は、namaeという仮引数で処理されて後ろに”さん”がつけられる。
だが、”さん”付けされたはずの値をputs"namae"で表示した結果”さん”付けはされていない。
原因として、ユーザーから入力された内容はまずnamae変数に代入されるが、その後namaeを本引数として仮引数に受け渡しnamae_sanメソッドに引き渡す際に、内容がコピーされて受け渡されている事が原因となる。
puts namae で出力されたものはユーザーが入力した値のままとなる。
namae_sanメソッドで”さん”付けされた値を改めてnamae変数に代入する形で目的が実現する。
def namae_san(namae)
namae = "#{namae}" + "さん"
end
puts "さん付けしたい名前を入力してください"
namae = gets.chomp
namae = namae_san(namae)
puts namae
=>実行結果 入力 とも 出力 ともさん