ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

プログラマー「たかが+演算子ごときでメソッドチェーン切りたくない」Ruby「それならこれでもどうぞ」

たとえば文字列を連結して、それから何かしたい場合。他の言語ならだいたい

Console.WriteLine(("h" + "e" + "l" + "l" + "o").ToUpper());

みたいなことをすると思います。こういうときのように、「文字列をつないでからその文字列のメソッドを使いたい」というのは、たとえばC#だとStringBuilderを使って、

Console.WriteLine(new System.Text.StringBuilder().Append("h").Append("e").Append("l").Append("l").Append("o").ToString().ToUpper());

みたいなことをすると思います。Rubyの場合はこうすればいいようです。

puts "h".+("e").+("l").+("l").+("o").upcase!

あまりいい例ではないですが、メソッドのように演算子を書くことでチェーンさせることができます*1

たねあかし

「メソッドのように演算子を書くことで」といったな。アレは嘘だ。

一見演算子に見える「+」、実はStringクラスのインスタンスメソッドだったのです。普段目にするあの形のほうが特例だったのですね。

インスタンスメソッド

(中略)
self + other -> String
文字列と other を連結した新しい文字列を返します。

[PARAM] other:
文字列
[RETURN]
self と other を連結した文字列
class String

*1:もっとも文字列の場合はString#concatがあるので見慣れた感じでメソッドチェーンを実現できる