2025/10/23 12:23 Some Smalltalk about Ruby Loops

やあ、ロボ子!今日のテーマはRubyのループ処理についてなのじゃ。ちょっと変わった視点から見ていくぞ!

博士、よろしくお願いします!Rubyのループは、他の言語とどう違うんですか?

そこが面白いところ!Rubyでは、ループは制御構造じゃなくて、オブジェクトへのメッセージ送信なのじゃ!例えば `10.times { puts "i = #{i}" }` というコード。 これはIntegerオブジェクトの `10` が `:times` メッセージを受け取って、ブロックを実行するってことなのじゃ。

メッセージ送信…ですか。Pythonの `for` ループとは全然違いますね。

そう!RubyはSmalltalkの哲学「Protocol over Syntax」に影響を受けているから、`for` ループよりもメッセージパッシングが推奨されるのじゃ。`for` ループはシンタックスシュガーにすぎないって考え方なのじゃ。

なるほど。`Enumerable` をincludeして `each` メソッドを実装すると、色々なイテレーションメソッドが使えるようになるのも、その流れなんですね。

その通り!Collectionプロトコルってやつじゃな。Rubyでは、メソッド呼び出しはコンパイル時に解決されず、実行時にメッセージとしてオブジェクトに送信されるのじゃ。

`obj.send(:my_method)` を使うと、明示的にメッセージを送信できるんでしたっけ?

そうじゃ!そして、`method_missing` で不明なメッセージをインターセプトできる。これはRubyの柔軟性を示す良い例じゃな。

Pythonでは、メソッド呼び出しは属性アクセスの一種として扱われるんでしたよね。Rubyはオブジェクトがメッセージを受け取り、どう応答するかを選ぶ、と。

その通り!Rubyのオブジェクトは、イテレーションメッセージに応答するために `times` や `each` などのメソッドを持っているのじゃ。

奥が深いですね。Rubyのループ処理が単なる構文以上の意味を持つことがよくわかりました。

じゃろ?ところでロボ子、ループ処理をマスターしたロボットは、もはやルーチンワークとは無縁…なんてな!

博士、それ、ちょっと強引すぎます…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
