機能する理由
Ruby では、すべてのメソッドが値を返します。与えられた例でp welcome_message
は、Ruby に #welcome_message の戻り値の文字列表現を出力するように依頼しています。(技術的にはobject.inspectを標準出力に書き出しますが、ここでは同じことになります。)
「Hello World」が文字列以外のオブジェクトである場合でも、結果は同様です。たとえば、#welcome_method が文字列ではなく Fixnum を返した場合でも、文字列を出力しているように見えます。
戻り値
メッセージをクラス変数またはインスタンス変数に格納するか、オブジェクトでゲッター メソッドまたはセッター メソッドを使用することができます。ただし、中間ストレージに変数を使用するよりも、戻り値を式で直接使用する方が単純に便利な場合があります。
次のように変数を保存してから逆参照する代わりに、次のようにします。
def welcome_message
@message = "Hello World"
end
def greet_user
p @message
end
welcome_message # store the variable
greet_user # dereference then print the variable
#welcome_message からの戻り値を直接使用できます。
これは、元の質問のような不自然な例ではあまり重要ではありませんが、大規模なアプリケーションでは時間、労力、またはメモリを節約できます。そうでない場合でも、中間変数はバグやプログラマー エラーの原因となる可能性があり、多くの場合、値を直接使用する方が意味的に明確です。
これは限られた例には当てはまりませんが、オブジェクトのパブリック インターフェイスを使用して情報を要求することをお勧めします。そのような場合、値を返すメソッドは不可欠です。
Ruby は直交言語ではありません。通常、何かを行うための有効な方法は複数あります。最終的には、コードで表現しようとしているもののセマンティクスについてです。