文字列結合
複数の文字列を連結して 1 つの文字列にする処理。+ 演算子やテンプレートリテラルなどで実現する。
文字列結合 (String Concatenation) とは、複数の文字列を連結して 1 つの文字列を生成する処理です。ほぼすべてのプログラミング言語で基本操作として提供されており、ユーザーインターフェースの構築、ログメッセージの生成、SQL クエリの組み立てなど、あらゆる場面で使用されます。単純な操作に見えますが、大量のデータを扱う場面ではパフォーマンスに大きな影響を与えるため、言語ごとの特性を理解しておくことが重要です。
JavaScript では + 演算子、concat() メソッド、テンプレートリテラル (`${}`) の 3 つの方法で文字列を結合できます。少数の文字列を結合する場合はどの方法でも性能差はほとんどありませんが、大量の文字列を結合する場合は配列の join() メソッドが効率的です。たとえば 10,000 個の文字列を + で結合すると、ループのたびに新しい文字列オブジェクトが生成されるため、処理時間が O(n²) に近づきます。一方 [...items].join('') は内部で最適化されており、O(n) で処理が完了します。JavaScript 文字列処理の書籍で各手法の使い分けを学べます。
Python では + 演算子のほか、f-string や ''.join() が使われます。CPython の実装では、ループ内での + による結合は毎回新しい文字列オブジェクトを生成するため、数千回以上の結合ではパフォーマンスが著しく低下します。公式ドキュメントでも、リスト内包表記と join() の組み合わせが推奨されています。Java では StringBuilder クラスが可変長の文字列バッファを提供し、ループ内での結合に適しています。Go 言語では strings.Builder が同様の役割を果たします。
文字列結合と混同されやすい概念に文字列補間 (String Interpolation) があります。文字列結合は複数の文字列を物理的に連結する操作であるのに対し、文字列補間はテンプレート内に変数や式の値を埋め込む構文です。JavaScript のテンプレートリテラル `Hello, ${name}!` は文字列補間の一種であり、内部的には文字列結合が行われますが、可読性の面で優れています。
文字列結合時には文字エンコーディングの一致にも注意が必要です。異なるエンコーディングの文字列を結合すると文字化けの原因になります。特にデータベースから取得した値とアプリケーション内の文字列を結合する場合、UTF-8 と Shift_JIS の混在が問題になることがあります。また、ユーザー入力をそのまま結合して SQL クエリや HTML を生成すると、SQL インジェクションや XSS の脆弱性につながるため、パラメータ化クエリやエスケープ処理を必ず併用しましょう。プログラミング基礎の入門書でも文字列操作は必須トピックとして扱われています。
文字数カウントの観点では、文字列結合の結果として得られる文字数は、結合元の各文字列の文字数の合計と一致します。ただし、結合時にセパレータ (区切り文字) を挿入する場合はその分の文字数が加算されます。たとえば 3 つの単語をカンマ区切りで結合すると、セパレータ 2 つ分の文字数が追加されます。テキストの総文字数を正確に把握するには、結合後の最終的な文字列に対してカウントを行うことが確実です。