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
を何百万回呼び出さない限り、パフォーマンスの問題は発生しないことは知っていますが、使用方法を除いてこの機能に関するドキュメントは見つかりませんでした。
Kotlinコンパイラはこのコードを次のように変換します。
new StringBuilder().append("Hello, ").append(name).append("!").toString()
キャッシュは実行されません。文字列テンプレートを含む式を評価するたびに、結果の文字列が再構築されます。
2番目の質問について:fullName
の換金が必要な場合は、明示的に行う必要があります。
_class Client {
val firstName: String
val lastName: String
val fullName = "$firstName $lastName"
}
_
このコードは、基礎となるゲッターgetFullName()
が連結の結果を持つ最終的なプライベートフィールドを使用することを除いて、切り取ったものと同等です。
ご存知のように、文字列補間では、プレースホルダーを含む文字列リテラルが評価され、プレースホルダーが対応する値に置き換えられた結果が生成されます。そのため、補間(KOTLIN)は次のようになります。
var age = 21
println("My Age Is: $age")
要確認:補間には「$」記号が使用されます。
これを行うことができます:
String.format("%s %s", client.firstName, client.lastName)