20190405のKotlinに関する記事は3件です。

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." みたいなように書くようにしよ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

些細な差ではあるが、パフォーマンス重要視してるプロジェクトではこういうのが大切だったりするんだろう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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。

参考

https://stackoverflow.com/questions/49124353/unresolved-reference-errors-for-android-library-module-referenced-in-app-modul

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む