【Ruby】文字列を結合するメソッド(+, <<, concat)の違いとは?
Rubyで文字列を結合する主な方法が3つあったので、それぞれの違いを調べてみた。
1. +メソッドで文字列と文字列を連結する方法
str1 = 'Hello ' str2 = 'World!' p str1 + str2 # => Hello World! p str1 # => "Hello" p str2 # => "World!"
ちなみに+メソッドを使ったあとでも文字列に変化なし。
2. <<メソッドで文字列の末尾に文字列を連結する方法
<<は主にシフト演算のときに使用するメソッドだが、文字列を結合するときも使用できる。
str1 = 'Hello ' str2 = 'World!' p str1 << str2 # => "Hello World!" p str1 # => "Hello World!" p str2 # => "World!"
代入されるstr1の末尾に文字列が結合されるため、str1はもとの文字列である「Hello」が維持されない破壊的メソッド。
3. concatメソッドで文字列の末尾に文字列を連結する方法
concatはStringのメソッドで、文字列の末尾に引数で指定した文字列を結合する。
str1 = 'Hello ' str2 = 'World!' p str1.concat(str2) # => "Hello World!" p str1 # => "Hello World!" p str2 # => "World!"
concatメソッドも<<メソッドと同じく、破壊的メソッド。
まとめ
<<メソッドとconcatメソッドは、もとの文字列が維持されない破壊的メソッドなので注意。 また、動きが同じように見える<<メソッドとconcatメソッドは参考ページによると、<<の方がconcatメソッドよりもわずかに処理速度が速い。 また、「concat」と書くよりも「<<」と書くほうが字数が少ないので、concatメソッドよりも<<メソッドのほうに軍配が上がりそう。