[Ruby]putsとreturnの違いをまとめてみた

Rubyを勉強してたら、putsとreturnの違いが分からなくなってきたのでまとめてみました。

putsとは


引数のオブジェクトを文字列に変換し、改行を加えて標準出力に出力します。 引数は複数指定できます。 ... Ruby 1.9 引数が nil のときは、Ruby 1.8では "nil" +改行を出力しますが、Ruby 1.9では空行のみ出力します。


putsは引数の文字列を表示させるだけってことですね。

puts 'Hello World' #=> Hello World

returnとは


returnの後に書いた値をメソッドの戻り値とし、メソッドを終了させる


returnは値を返すだけで表示させる訳ではないということですね。

return文で値を返し、それをputsで表示させるということでしょうか。

def greet

retun 'Hello World'
end #=>

何も表示されません。

returnは戻り値を受け取るんだけで表示させることはありません。

def greet

return 'Hello World'
end
puts greet #=> Hello World

関数で受け取った結果をputs~で表示させています。

また、returnは省略可能です。

省略した場合は最後に評価された値が戻り値になります。

def greet

'Hello World'
end
puts greet #=>Hello World

def greet

'Hello'
'World'
end
puts greet #=>World

省略できるならreturnいらなくない?って思いますが、returnにはメソッドを終了させることも可能です。

メソッドから脱出したい時に使います。

def greet(name = '')

return 'nameが空です' if name.empty?
"Hello #{name}!!!"
end
puts greet #=>nameが空です

def greet(name = '')

return 'nameが空です' if name.empty?
"Hello #{name}!!!"
end
puts greet('Keisuke') #=>Hello Keisuke!!!

1つ目の例文はif文が真なのでreturn文を返しメソッドから脱出しました。

2つ目の例文はif文が偽なのでreturn文は表示されず、二文目が表示されました。

もし、returnを書いていなかったら

def greet(name = '')

'nameが空です' if name.empty?
"Hello #{name}!!!"
end
puts greet #=> Hello !!!

最後に書いた文が評価されるのでif文が真偽どちらだろうと1行目は表示されません。


まとめ

putsは出力する時に、returnは戻り値を受け取る時やメソッドから脱出したい時に使います(省略化したら脱出は不可)。