Kotlinの文字列結合について

採用はこちら

Kotlinでは、文字列結合の方法が非常に豊富に用意されており、用途に応じて最適な手段を選ぶことが重要です。

単純な表示用文字列から、大量データを扱う処理、HTML・SQL・ログ生成まで、状況によってベストプラクティスは変わります。

本記事では、Kotlinにおける文字列結合の方法を網羅的に整理し、実務での正しい使い分けまで踏み込んで解説します。

目次

+ 演算子による文字列結合(基本)

Kotlinでは、+ 演算子を使って文字列を結合できます。

val firstName = "Taro"
val lastName = "Yamada"
val fullName = firstName + " " + lastName

数値や他の型が混在していても、自動的に toString() が呼ばれます。

val age = 30
val message = "年齢は" + age + "歳です"

特徴

  • Javaと同様の書き方が可能
  • 短い文字列では可読性も悪くない
  • Kotlin/JVMでは単一式の場合、内部的に最適化される

注意点

+ 演算子は再代入やループを伴う場合に問題になります。

var text = ""
for (i in 1..1000) {
    text += i   // 非推奨
}

このようなケースでは毎回新しい String が生成され、パフォーマンスとメモリ効率が悪化します。

文字列テンプレート(Kotlinで最も推奨される方法)

Kotlinの文字列結合で最も頻繁に使われるのが文字列テンプレートです。

val name = "Taro"
val age = 30
val message = "私の名前は$name、年齢は$age歳です"

式を埋め込む場合

val price = 1200
val text = "税込価格は${price * 1.1}円です"

特徴

  • 非常に可読性が高い
  • + よりも意図が明確
  • UI表示・ログ・メッセージ生成で最優先

設計上の注意

${} の中には式を書けますが、可読性と保守性の観点から、複雑な処理や副作用のあるコードは避けるのが望ましいです。

// 推奨
val total = calcTotal()
"合計金額は$total 円です"

複数行文字列(トリプルクォート)

HTML、SQL、JSON、メール本文などでは、トリプルクォート文字列が有効です。

val html = """
    <html>
        <body>
            <h1>Hello, $name</h1>
        </body>
    </html>
""".trimIndent()

ポイント

  • 改行やレイアウトをそのまま保持
  • 文字列テンプレートと併用可能
  • trimIndent() / trimMargin() でインデント調整

補足(実務視点)

SQLなどでは、実運用ではプレースホルダ(PreparedStatement)を使うのが基本ですが、文字列構造の説明としてはこの書き方が有効です。

StringBuilder による文字列結合(パフォーマンス重視)

大量の文字列を扱う場合、StringBuilder が適しています。

val sb = StringBuilder()
sb.append("Hello")
sb.append(" ")
sb.append("World")
val result = sb.toString()

ループ処理の例

val sb = StringBuilder()
for (i in 1..1000) {
    sb.append("No.").append(i).append("\n")
}

特徴

  • メモリ効率が高い
  • 高速
  • Javaと同じ StringBuilder を利用

buildString {}(Kotlin推奨の高水準API)

Kotlin標準ライブラリが提供する、StringBuilder をラップした便利な関数です。

val result = buildString {
    append("Hello")
    append(" ")
    append("World")
}

ループとの組み合わせ

val text = buildString {
    for (i in 1..10) {
        append("Item ").append(i).append("\n")
    }
}

特徴

  • 内部では StringBuilder を使用
  • 可読性と性能を両立
  • Kotlinでは 最も推奨される大量結合手法

joinToString()(コレクション専用)

リストや配列を文字列に変換する場合は joinToString() が最適です。

val list = listOf("Apple", "Banana", "Orange")
val result = list.joinToString(", ")

カスタマイズ

val result = list.joinToString(
    separator = " | ",
    prefix = "[",
    postfix = "]"
)

ラムダ利用

val users = listOf("Taro", "Hanako")
val text = users.joinToString("\n") { "User: $it" }

パフォーマンスと可読性の比較

方法可読性パフォーマンス主な用途
+簡単な結合
文字列テンプレートUI・ログ
StringBuilder大量処理
buildStringKotlin推奨
joinToString◎◎コレクション

※ JVM上では + やテンプレートが最適化されるケースもありますが、ループ・再代入・大量データでは差が顕著になります。

実務での使い分け指針(結論)

UI・ログ・メッセージ

"ユーザー$nameがログインしました"

複数行テキスト

"""
Error occurred.
User: $name
""".trimIndent()

大量文字列生成

buildString {
    data.forEach { append(it).append("\n") }
}

リスト表示

items.joinToString(", ")

まとめ

  • 基本は文字列テンプレート
  • 大量結合は buildString
  • コレクションは joinToString
  • + は限定的に使う

Kotlinの文字列結合は「どれを使っても動く」反面、選び方次第で可読性・保守性・性能に大きな差が出ます

以上、Kotlinの文字列結合についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次