Rubyで文字列を追加したり連結する場合、メソッドは何を使っているでしょうか?
候補としては「+」「concat」「<<」の3つがありますが、「+」は非破壊的メソッドなのに対して「concat」「<<」は破壊的メソッドです。
その違い以外にも、多くの文字を連結・追加しようとした際に、非破壊的メソッドの「+」で接続しようとすると破壊的メソッドよりも膨大な時間がかかるという違いがあります。
今回は、プログラミング言語Rubyにおける文字列の結合の方法について、まとめます。
RubyでClassクラスの引数付きnewメソッドを使い、インスタンスを生成すると同時にinitializeメソッドを呼ぶ
目次
Rubyで文字列を結合する3種類のメソッド「+」「concat」「<<」を使って文字列を連結・追加してみる
実際に、それぞれの文字列結合メソッドを使ってみます。
str1 = "Hello" str2 = "World" puts str1 + str2 puts str1.concat(str2) puts str1 << str2 puts str1.concat(str2)
上記の実行結果は以下になります。
$ ruby concat.rb HelloWorld HelloWorld HelloWorldWorld HelloWorldWorldWorld
+メソッドを実行したときは、str1とstr2を連結している(str1の内容を書き加えたりしていない)だけですが、concatメソッドや<<メソッド(?)を使った場合、メソッドの代入先であるstr1に文字列が追加されているのが分かります。
「+」メソッドは非破壊的メソッドなので文字列の書き換えは発生しない
「concat」や「<<」メソッドは破壊的メソッドのため、文字列の上書きが発生する。
上記のことが実行結果から分かると思います。
文字列を単純に連結するくらいであれば「+」で十分ですが、大量に連結するとなれば配列に格納してconcatメソッド(or <<メソッド)を使う等の工夫が必要です。(処理速度で10倍違うらしい…!)