少し気になったので文字列連結("${this} is a pen."
みたいなこと)のパフォーマンスについて調査してみました。
結果、Javaと同様StringBuilderやStringBufferを使った方がよいという結果でした。
たぶん "${this} is a pen."
みたいなことをしたときには、
Java的には "this" + " is a pen."
になってんだろうなぁ。
文字列連結においてもKotlinではStringBuilderに変換されていたので、
無理にStringBuilderを使っても問題ないというのがわかりました。
fun main(args: Array<String>) {
var before = System.currentTimeMillis()
for (i in 0..10000) {
val test = "a b $i a b $i fdsafda $i"
}
println("case A =${System.currentTimeMillis() - before}ms")
before = System.currentTimeMillis()
for (i in 0..10000) {
val buf = StringBuilder().also {
it.append("a b ")
it.append(i)
it.append(" a b ")
it.append(i)
it.append(" fdsafda ")
it.append(i)
}
val test = buf.toString()
}
println("case B =${System.currentTimeMillis() - before}ms")
}
case A =46ms
case B =23ms
些細な差ではあるが、パフォーマンス重要視してるプロジェクトではこういうのが大切だったりするんだろう。
差分があるように見えるのはJVM起動後などが遅かったりGCが走ったりといろいろな要因があるようです。
(@sdkei さん、ありがとうございました!!)
StringBuilderって使うと結構可読性下がっちゃってめんどくせぇなぁって思ってたので、
結局同じことになるのであれば"${this} is a pen."
みたいなように書くようにしよ。