2018/07/28 このエントリーをはてなブックマークに追加 はてなブックマーク - Kotlin1.3-M1の変更点を読んでたけど結構面白かった

Kotlin1.3-M1の変更点を読んでたけど結構面白かった


Kotlin ver 1.3-M1が出ました。

See what’s coming in Kotlin 1.3-M1
https://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/

毎回アップデートがあるたびに変更内容を眺めてはいるのだけど、
今回は久しぶりに面白いバージョンアップだなあと思いました!

  • Coroutinesが安定化しました(experimentalじゃなくなりました)
  • when構文で、変数を良い感じに使えるようになりました
  • Functionが255まで使えるようになった
  • SuccessOrFailureってのが増えたけど関数の戻り値にしちゃダメよ
  • unsignedが実験的に導入されました
  • プラットフォームごとのランダム値生成対応

など。



そして今回もshirajiさんみたいにKotlinへコミットしてる日本の方もいて良いですねー。
https://github.com/t-kameyama
多分日本の方?だと思う。







Coroutinesに関しては、hadiさん曰く、
「experimentalって言ってるけど、実はもう安定してるんだよ?」って感じだったらしいです。
そして、今回オフィシャルにexperimentalが外れた形みたいです。
ってことで今は新しい安定したCoroutinesへの移行期間で、1.2のCoroutinesを使ってた人は移行しないとダメみたいですね。パッケージ変更やクラスがちょこっと変わっているみたいです。


これ、地味に良くて。今までNGだったこういうのが出来るようになると。

fun main(args: Array<String>) {
    val hoge = Hoge("hagehage")
    val res = when(val hage = hoge.toStr()) {
        "hage" -> "hage"
        "hagehage" -> "hage"
        else -> "else"
    }
    println(res)
}


class Hoge(val value : String) {
    fun toStr() = value
}

when(val hage = hoge.toStr()) というのが今まで出来なかったのですね。


個人的にツボでしたw
KotlinではScalaと同様FunctionN が0から22まであるんですけど、
22以降も使えるようになったと。
でもKotlinではFunction255まで使えるんだぜ(ドヤッ)ってジョークに使えそうですね。
そうですね、平和にいきましょう。
cf) https://stackoverflow.com/questions/4152223/why-are-scala-functions-limited-to-22-parameters

んでまぁ、今さらFunction255まで定義したのかなぁ、、ははって思ってたら
こういうことらしいですね。
https://github.com/JetBrains/kotlin/blob/master/spec-docs/function-types.md#functions-with-more-than-22-parameters-at-runtime

package kotlin.jvm.functions

interface FunctionN<out R> : kotlin.Function<R> {
    val arity: Int
    fun invokeVararg(vararg p: Any?): R
}
annotation class arity(val value: Int)

で、@arity(42) FunctionNって書けばFunction42の実装がコンパイルされるということみたいです。
まぁ、これって、使う側はlambda式で書いてたら気にする部分ではないんですけど、結構思い切ったなあっていうか。アノテーション好きだなぁという気持ちになりました。
仕組み的には255以上の関数も出来ますけど、Javaの引数の限界的なアレですね。


このあたりはおそらくマルチプラットフォームを意識した対応なのかな??とかそんな感じがしますが、
UInt, ULong, UByte, UShortって型が出来たみたいですね(experimental)。
unsingedの数値リテラルとかも増えてて、1.3のタイミングでこういうの増えちゃうのかー、おもしろー。ってところではあります。
Javaではないっちゃないんですけどね、unsinged。
ひしだまさんのメモ見ると、unsigned表現のString変換は増えてて、ヘーっとか思いました。
http://www.ne.jp/asahi/hishidama/home/tech/java/type.html

内部的にどういう風に保持するんだろう。もはや、JVMだけがターゲットではないですが、気が向いたらjavapしたいところです。



  • 1.3にしては結構面白い変更が入ってて面白い(小学生並みの感想)
  • 互換性とかは一応気にしてバージョンアップしてるようなので「バージョンアップしたらいきなりぶっ壊れる」とかは心配しないで良いとは思います。ただしバージョンアップの案内に従った方が良いです。普段Kotlin使ってる方としては、これまで通りKotlinと付き合えば良いという感じです。




0 件のコメント:

コメントを投稿