これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の16日目の記事です。
最近 Ruby でリテラル文字列を変更不可にするとかしないとかって話がありますが、Crystal の文字列は最初から変更不可です。 文字列オブジェクトを変更するようなメソッドはありません。 文字列を変更するような操作は新しいオブジェクトが返ります。
これは Ruby脳にはつらい。…かと思ったんだけど、実はたいしてつらくなかったので、Ruby もそれでいいんじゃないかなーと思ったり。
文字列に動的に追加して大きな文字列を作成するような場合、Ruby では
str = "" 100.times do str << "何か" end
みたいに書くのですが、Crystal では文字列の追加ができないからといって、
str = "" 100.times do str += "何か" end
と書いちゃったりすると、さすがに効率が悪いです。
String.build というのを使うと良いみたいです。
str = String.build do |s| 100.times do s << "何か" end end