web-dev-qa-db-ja.com

Kotlinでは文字列補間はどのように機能しますか?

Kotlinコンパイラは"Hello, $name!"のようなものを使用して翻訳しますか

Java.lang.String.format("Hello, %s!", name)

または、他のメカニズムがありますか?

そして、例えばこのようなクラスがある場合:

class Client {
  val firstName: String
  val lastName: String
  val fullName: String
    get() = "$firstName $lastName"
}

このゲッターはキャッシュされた文字列を返しますか、それとも新しい文字列を構築しようとしますか?代わりにlazyOfデリゲートを使用する必要がありますか?

fullNameを何百万回呼び出さない限り、パフォーマンスの問題は発生しないことは知っていますが、使用方法を除いてこの機能に関するドキュメントは見つかりませんでした。

28
meztihn

Kotlinコンパイラはこのコードを次のように変換します。

new StringBuilder().append("Hello, ").append(name).append("!").toString()

キャッシュは実行されません。文字列テンプレートを含む式を評価するたびに、結果の文字列が再構築されます。

32
yole

2番目の質問について:fullNameの換金が必要な場合は、明示的に行う必要があります。

_class Client {
    val firstName: String
    val lastName: String
    val fullName = "$firstName $lastName"
}
_

このコードは、基礎となるゲッターgetFullName()が連結の結果を持つ最終的なプライベートフィールドを使用することを除いて、切り取ったものと同等です。

12
voddan

ご存知のように、文字列補間では、プレースホルダーを含む文字列リテラルが評価され、プレースホルダーが対応する値に置き換えられた結果が生成されます。そのため、補間(KOTLIN)は次のようになります。

var age = 21

println("My Age Is: $age")

要確認:補間には「$」記号が使用されます。

6
Anish Arya

これを行うことができます:

String.format("%s %s", client.firstName, client.lastName)
0
LTroya