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は戻り値を受け取る時やメソッドから脱出したい時に使います(省略化したら脱出は不可)。