Rubyのメソッドは、最後に明示的なreturn
文を記述しない場合でも、そのメソッドの最後に評価された式の結果が自動的に返されます。以下に例を示します。
def add(a, b) sum = a + b # 最後に評価された式はこの行の式 end result = add(3, 5) puts result # 出力: 8
この例では、add
メソッドの最後にsum
変数の値が評価されて返されます。
ただし、return
文を明示的に使用することで、メソッドの途中で値を返すこともできます。
def subtract(a, b) return a - b # メソッドの途中で値を返す puts "この行は実行されません" end result = subtract(10, 4) puts result # 出力: 6
こちらの例では、return
文が実行されるため、メソッドの途中で値が返されて、その後のコードは実行されません。
要するに、Rubyのメソッドでは、明示的にreturn
文を使わなくても、最後に評価された式が自動的に返されるため、return
を省略することが一般的です。
なぜそうなるのか?
Rubyの設計思想の一つは、シンプルさとエレガンスです。メソッドが最後に評価された式を自動的に返すことにより、冗長なコードを減少させ、より簡潔なプログラムを書くことができます。この仕様の背後には、以下のような理由が考えられます。
直感的なコード: Rubyは直感的な言語として知られており、メソッドが最後に評価された値を返す仕様は、プログラマが予測可能で直感的なコードを書くのを助けます。値を明示的に返すために毎回
return
文を書く必要がないため、コードがすっきりとしています。冗長性の削減: メソッドの最後に
return
文を書く必要がないことで、余分なコードを削減することができます。メソッドの中身が単純な場合には、値を返すためにreturn
文を書くことなくメソッドを定義できます。柔軟性: メソッドが最後に評価された式を自動的に返すことで、プログラマは柔軟にコードを書くことができます。途中で条件分岐やループを使用して値を計算し、その結果をメソッドから返すことができます。
ただし、プログラマが明示的にreturn
文を使って値を返すことも可能であり、必要に応じて制御を明示的に行うことができます。このバランスにより、シンプルさと柔軟性の両方を保つことができるのです。
このような設計思想によって、Rubyは初心者から上級者まで幅広いプログラマにとって魅力的な言語となっています。
(上記の文章は、ChatGPTのデジタルな鼓動が紡いだものです。)
Matz公式見解っぽいのがあったので記載しておきます。
— テク a.k.a TechNinja🥷🏼テクノロジー忍術の達人 (@TechNinja_z) August 11, 2023
やはりポイントは動的型のプログラミングスタイルがいいかどうかって話になりそう。
rubyのようにreturnを省略することはわかりやすいですか?https://t.co/KxnO50Yzuq https://t.co/EYbGrYPQAM pic.twitter.com/lbEzqvLAT4
結局Rubyは(古典的)Lispの影響を強く受けているので、言語仕様的には「返値を気にしないメソッド」はあっても「返値がないメソッド」は存在しないんだよな。まあ、高速化のときに「値を返さない」という概念があったほうが有利なので完全否定するつもりはないけど
— Yukihiro Matz (@yukihiro_matz) August 11, 2023