基礎

Rubyの文字列連結入門|+演算子と<<演算子の違いを解説

プログラミングでは複数の文字列を結合して1つの文字列にする操作が頻繁に発生します。Rubyには文字列を連結するための方法がいくつかあり、それぞれ特性が異なります。この記事では+演算子、<<演算子、concatメソッドを使った文字列連結の方法と、その違いについて詳しく解説します。

基本的な使い方

+ 演算子で連結

+演算子は2つの文字列を結合して新しい文字列を生成します。元の文字列は変更されません。

Ruby
first = 'Hello'
second = ' World'
result = first + second

puts result
puts first  # 元の文字列は変わらない
実行結果
Hello World
Hello

+演算子は新しい文字列オブジェクトを生成するため、元の変数の値は変更されません。これを「非破壊的」な操作と呼びます。安全に文字列を結合したい場合に適しています。

<< 演算子で連結(破壊的)

<<演算子は元の文字列オブジェクト自体に文字列を追加します。新しいオブジェクトを生成しないため、メモリ効率が良いのが特徴です。

Ruby
greeting = 'Hello'
greeting << ' World'
greeting << '!'

puts greeting
実行結果
Hello World!

<<演算子は元の文字列を直接変更する「破壊的」な操作です。ループ内で繰り返し文字列を追加する場合など、パフォーマンスが重要な場面で使われます。ただし、元の値が変わることを理解した上で使用する必要があります。

concat メソッド

concatメソッドは<<と同様に破壊的に文字列を追加します。複数の引数を受け取ることもできます。

Ruby
text = 'Ruby'
text.concat(' is', ' fun!')

puts text
実行結果
Ruby is fun!

実践的な使い方

複数の文字列を連結する

+演算子を連続して使うことで、3つ以上の文字列を結合できます。

Ruby
first_name = '太郎'
last_name = '田中'
full_name = last_name + ' ' + first_name

puts "名前: #{full_name}"
実行結果
名前: 田中 太郎

数値と文字列の連結

Rubyでは文字列と数値を直接+で連結するとエラーになります。数値をto_sメソッドで文字列に変換する必要があります。

Ruby
age = 25

# エラーになる例
# puts '年齢: ' + age + '歳'

# 正しい方法1: to_sで変換
puts '年齢: ' + age.to_s + '歳'

# 正しい方法2: 式展開を使う(こちらが推奨)
puts "年齢: #{age}歳"
実行結果
年齢: 25歳
年齢: 25歳

数値と文字列の連結では、式展開(#{})を使う方法が最もシンプルで推奨されています。式展開は自動的にto_sを呼び出すため、明示的な型変換が不要です。

+ と << の使い分け

+は元の文字列を変更したくない場合に使います。<<は繰り返し処理で文字列を組み立てる場合に使うと、メモリ効率が良くパフォーマンスが向上します。日常的な文字列結合には式展開(#{})が最も読みやすくおすすめです。

型の不一致エラーに注意

'文字列' + 数値のように異なる型を+で連結するとTypeErrorが発生します。必ずto_sで変換するか、式展開を使いましょう。

まとめ

  • +演算子は新しい文字列を生成する(非破壊的)
  • <<演算子とconcatは元の文字列を直接変更する(破壊的)
  • 数値と文字列の連結にはto_sによる変換か式展開が必要
  • 日常的な文字列結合には式展開(#{})が最も推奨される
  • パフォーマンスが重要な場面では<<演算子が有利