【Ruby】文字列を結合するメソッド(+, <<, concat)の違いとは?

f:id:haru89:20200412211716p:plain:w200

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メソッドよりも<<メソッドのほうに軍配が上がりそう。

参考

https://qiita.com/Kta-M/items/c7c2fb0b61b11d3a2c48