プログラミングでは複数の文字列を結合して1つの文字列にする操作が頻繁に発生します。Rubyには文字列を連結するための方法がいくつかあり、それぞれ特性が異なります。この記事では+演算子、<<演算子、concatメソッドを使った文字列連結の方法と、その違いについて詳しく解説します。
基本的な使い方
+ 演算子で連結
+演算子は2つの文字列を結合して新しい文字列を生成します。元の文字列は変更されません。
first = 'Hello'
second = ' World'
result = first + second
puts result
puts first # 元の文字列は変わらないHello World
Hello+演算子は新しい文字列オブジェクトを生成するため、元の変数の値は変更されません。これを「非破壊的」な操作と呼びます。安全に文字列を結合したい場合に適しています。
<< 演算子で連結(破壊的)
<<演算子は元の文字列オブジェクト自体に文字列を追加します。新しいオブジェクトを生成しないため、メモリ効率が良いのが特徴です。
greeting = 'Hello'
greeting << ' World'
greeting << '!'
puts greetingHello World!<<演算子は元の文字列を直接変更する「破壊的」な操作です。ループ内で繰り返し文字列を追加する場合など、パフォーマンスが重要な場面で使われます。ただし、元の値が変わることを理解した上で使用する必要があります。
concat メソッド
concatメソッドは<<と同様に破壊的に文字列を追加します。複数の引数を受け取ることもできます。
text = 'Ruby'
text.concat(' is', ' fun!')
puts textRuby is fun!実践的な使い方
複数の文字列を連結する
+演算子を連続して使うことで、3つ以上の文字列を結合できます。
first_name = '太郎'
last_name = '田中'
full_name = last_name + ' ' + first_name
puts "名前: #{full_name}"名前: 田中 太郎数値と文字列の連結
Rubyでは文字列と数値を直接+で連結するとエラーになります。数値をto_sメソッドで文字列に変換する必要があります。
age = 25
# エラーになる例
# puts '年齢: ' + age + '歳'
# 正しい方法1: to_sで変換
puts '年齢: ' + age.to_s + '歳'
# 正しい方法2: 式展開を使う(こちらが推奨)
puts "年齢: #{age}歳"年齢: 25歳
年齢: 25歳数値と文字列の連結では、式展開(#{})を使う方法が最もシンプルで推奨されています。式展開は自動的にto_sを呼び出すため、明示的な型変換が不要です。
+は元の文字列を変更したくない場合に使います。<<は繰り返し処理で文字列を組み立てる場合に使うと、メモリ効率が良くパフォーマンスが向上します。日常的な文字列結合には式展開(#{})が最も読みやすくおすすめです。
'文字列' + 数値のように異なる型を+で連結するとTypeErrorが発生します。必ずto_sで変換するか、式展開を使いましょう。
まとめ
+演算子は新しい文字列を生成する(非破壊的)<<演算子とconcatは元の文字列を直接変更する(破壊的)- 数値と文字列の連結には
to_sによる変換か式展開が必要 - 日常的な文字列結合には式展開(
#{})が最も推奨される - パフォーマンスが重要な場面では
<<演算子が有利