文字列結合
プログラミングにおいて、文字列結合(もじれつけつごう)または文字列連結(もじれつれんけつ)(string concatenation)とは、ある文字列の後ろに別の文字列をつなげて1つの文字列にする処理のことである。例えば、「ABCDE」という文字列と「12345」という文字列を結合すると「ABCDE12345」という1つの文字列になる。
文法
編集いくつかのプログラミング言語では、文字列結合は二項の中置記法の演算子として記述される。+
(加算)演算子は文字列引数の結合を示すようにオーバーロードされる。この場合、"Hello, " + "World"
の結果は"Hello, World"
となる。
他の言語では、特に文字列型への暗黙の型変換を指定するために、一般的な加算演算子よりも複雑なふるまいをする文字列結合のための別の演算子が用意されている。例えば、Edinburgh IMP, Perl, PHPでは .
、 Ada, Visual Basicでは &
である[1]。PL/I や Oracle Database SQL では ||
が使用される[2]。
C言語, C++, Pythonなどには文字列リテラル結合がある。これは、演算子を使用せずに文字列リテラル同士を結合して1つの文字列リテラルとするものである。例えば、"Hello, " "World"
というコードは "Hello, World"
と書くのと同じである。他の言語では、演算子を用いた文字列リテラルの結合は、定数畳み込みによってコンパイル時に評価される。
実装
編集通常、文字列の結合は実行時に行われる。そのため、結合後の文字列は実行時まではわからない。しかし、文字列リテラルの場合はコンパイル時に計算することができ、文字列リテラル結合や定数畳み込みによってコンパイル時に結合がされる場合もある。
応用
編集音声
編集文字列結合は、ユーザへの音声応答を動的に作り出す場合に応用できる。例えば、ボタンを押すと現在時刻を音声で知らせる時計では、以下のようにバラバラに録音した音声ファイルを正しい順番に結合して、一続きの音声としてスピーカーに出力する。
- 「ただいま」
- 「午前」
- 「八時」
- 「三十」
- 「五分」
- 「二十」
- 「二秒」
- 「です」
様々なコンピュータ化された放送設備において、動的な告知(例えば空港における運行案内など)に文字列結合が使用される。システムには数・ルート・航空会社・目的地・時刻などの音声が保存されており、施設を通して通知する文法的に正しい文を生成し、その順序に順って音声を再生する。
データベース理論
編集リレーショナル・データベースの設計の原則の一つは、データテーブルのフィールドがテーブルの主題の一つの特徴を反映しなければならないということである(一意性制約)。そのため、結合された文字列を含むことはできない。文字列を結合した状態のレポートが必要な場合は、レポートを作成する時点で文字列を結合しなければならない。
例えば、特定の顧客の住所を示す場合に、データには国名、郵便番号、州・都道府県名、都市名、地区名、番地、部屋番号が含まれ、それらを結合して1つの住所になる。しかし、顧客データ・テーブルには、住所を結合した状態のフィールドを格納してはいけない。これらのデータを分離した状態で保持しておき、出力時に結合する必要がある。その理由は、大きなサイズのデータの入力や更新は、誤りを起こしやすくなり、労働集約的になることである。国名、郵便番号、州・都道府県名、都市名を分割して入力することで、データ入力確認(存在しない州・都道府県名など)をすることができるようになる。また、都市名などで分類をすることができるようになる。