読者です 読者をやめる 読者になる 読者になる

文字列の結合

ぼくもヘンだなとは思っていたのだけど、Pythonはなぜ?str.join(seq)なのか?という渋川さんのエントリを見てようやく納得した。僕自身もソフトウェアを作る過程で、常にコストと利便性のバランスを問い続けてきたから、このjoinのちょっとした気持ち悪さにもそういう背景があるだろうということに気付ければよいのだけど。歴史を知ることはとても大切だけど、目の前に気持ち悪いことがあると頭に血が上って理性を保てなくなる病気はなんとかしたいですね。
Rubyと比較してどうだという記述もあるのだけど。最近書いていたOCamlだとふつうは

# String.concat ", " [ "foo"; "bar" ];;
- : string = "foo, bar"

そのまんまの名前の関数があるしそれ以外の方法はあまりない。特殊な使い方をしたいなら自分でfold_leftしてくださいねというか。joinとかいうようわからん名前は使わないというか。
Erlangだとお情けでjoinという関数があって、まあどちらも引数ですね。

> string:join(["one", "two", "three"], ", ").
"one, two, three"  

結論としては、関数型といわれる言語だとEnumerableのような概念はあまりないので便利ですね!

おまけ:

Haskellだとintercalateという、よりエレガントでアカデミークな名前がついていてさらに好印象ですね。これはData.Listなのでリストにしか使えないですがうまくEnumerableみたいな型クラスを定義できていたらそちらで他の型でも上手く扱えるかもしれません。そんなことより息子が僕のiPhoneを持って逃走しているので誰か助けてください。