Rubyにおけるputsとreturnは
何か似てる感じがして分かりにくいですよね
結論としてputsとreturnの違いは
戻り値を必要とするか否かです
そして、戻り値というのは
何らかの処理結果で返される結果のことをいいます
使用する目的としては以下の通りになります!
puts:文字列を出力する為に使う
return:一連の処理結果から戻り値を返すこと
ちなみに値というのは、
数値だけでなく文字列、真偽値、配列、ハッシュなど
あらゆるものを含みます!
さて、戻り値を返せないputsを使おうとすると
どうなってしまうのでしょうか??
例えば、このようにreturnの代わりにputsを使って
年齢に応じて運賃を出す処理を書いたとします
ちなみに年齢を入れる引数は数値の8とします
#大人は12歳以上で200円 こども12歳未満6歳以上で100円 幼児は6歳未満で無料
def train_fare(age)
if age >= 12
puts '大人料金になります'
puts 200
elsif age < 12 && age >= 6
puts 'こども料金になります'
puts 100
else age < 6
puts '6歳未満は幼児で無料となります'
puts 0
end
end
#引数として年齢を入力する(age)には8を入れる
puts "東京駅から新宿駅までの料金は#{train_fare(8)}円です"
出力結果 #=>
こども料金になります
東京駅から新宿駅までの料金は円です
このように料金の数値の値が
何も出力されませんでしたね、、
これはtrain_fareという関数の中で
returnではなく、値を返すことが出来ない
putsを使ったのが原因です🙇♂️
putsを使ったことにより
train_fareの関数の処理結果の数値を返すことが出来ず、
結果として#{train_fare(8)}の値が
nilという存在しないものに
なってしまいました、、
ですので、putsではなくreturnを使いましょう
#大人は12歳以上で200円 こども12歳未満6歳以上で100円 幼児は6歳未満で無料
def train_fare(age)
if age >= 12
puts '大人料金になります'
return 200
elsif age < 12 && age >= 6
puts 'こども料金になります'
return 100
else age < 6
puts '6歳未満は幼児で無料となります'
return 0
end
end
#引数として年齢を入力する(age)には8を入れる
puts "東京駅から新宿駅までの料金は#{train_fare(8)}円です"
出力結果 #=>
こども料金になります
東京駅から新宿駅までの料金は100円です
このようにreturnを使うことによって
引数に入力した数値が処理結果として正しく返され、
料金の数値がしっかり表示されました
以上になります。お疲れ様でした!