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

Crystal の文字列は変更不可でつらい?

Crystal Ruby

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の16日目の記事です。

qiita.com

最近 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