- 投稿日:2019-04-05T18:02:22+09:00
Kotlinの文字列連結はStringBuilderが使われるという話(タイトル変更済み)
少し気になったので文字列連結(
"${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."
みたいなように書くようにしよ。
- 投稿日:2019-04-05T18:02:22+09:00
Kotlinの文字列連結でもStringBuilderを使った方がいいという話
少し気になったので文字列連結のパフォーマンスについて調査してみました。
結果、Javaと同様StringBuilderやStringBufferを使った方がよいという結果でした。たぶん
"${this} is a pen."
みたいなことをしたときには、
Java的には"this" + " is a pen."
になってんだろうなぁ。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些細な差ではあるが、パフォーマンス重要視してるプロジェクトではこういうのが大切だったりするんだろう。
- 投稿日:2019-04-05T00:42:14+09:00
Androidのライブラリプロジェクト内のKotlinクラスを参照するとUnresolved referenceが出る問題対処
Androidプロジェクトから別のAndoridライブラリプロジェクト内のKotlinクラスを参照した時に、Unresolved referenceとなりビルドエラー発生。1hくらいはまったのでメモを残す。
原因
ライブラリプロジェクトのbuild.gradleにKotlin用の記述が漏れているため。
(Androidライブラリプロジェクト作成時、Kotolin用の記述は自動生成されない)解決方法
ライブラリプロジェクトを開いて、以下を実施。
Tools -> Kotlin -> 'Configure Kotlin in projects'
(All modules with Kotlin files are configured'を選択してOK。参考