Kotlin M4リリース

プログラミング言語のもう1つのマイルストーンであるKotlin M4 がリリースされました 。 現在、KotlinはJDK7と互換性があり、タイプをより良く出力することを学び、より高速になりました。 デバッガーは大きな進歩を遂げ、IDEとJUnitの統合、新しいアセンブリメカニズムがサポートされ、最終的にインクリメンタルコンパイラーに成長します...この投稿では、最も興味深いものについて簡単に説明します。


かんノテーター



おそらく覚えているように、Kotlin型システムはJavaのシステムよりも多少リッチです。 特に、Kotlinは型システムレベルでnull参照を制御します。 これは、どこでもnullになり得ないものとは言えないJavaコードと対話する必要があるまで正常に機能し、Kotlinコンパイラーは最悪の事態を想定する必要があります。 このアプローチは安全ですが、あまり便利ではないため、以前のリリースであるKotlin M3では、このメソッドまたはそのメソッドがnullを返さないことをユーザーに環境に説明できる外部注釈メカニズムをサポートしました(実際、環境にもっと伝えることができますしかし、その別の時間についての詳細)。

ところで、これらのアノテーションはKotlinだけでなく、IntelliJ IDEAにはJavaでのNPEの回避に役立つすばらしい検査があります 。JetBrainsではこれらを常に使用しており、非常に満足しています。

ただし、大きなライブラリに手動で注釈を付けるのは困難であり、それらのコードはどの注釈を示す必要があるかが常に明確ではありません。 そのため、特別なツール(もちろんKotlinで作成)を開発しました-KAnnotatorは、ライブラリのバイトコードを読み取り、必要な注釈を自動的に表示します。 これは次のように動作します。jarファイルのセットが入力され、KAnnotatorがそれらを分析し、次のような注釈を含むxmlファイルを生成します。
画像
これらの注釈はプロジェクトに接続することができ、IDEとKotlinコンパイラの両方がそれらを表示します。

KAnnotatorはまだ非常に若いので、よりスマートに開発および成長できますが、今日ではM4に含まれるJDKの自動注釈付きバージョンが既にあります

データクラスのコピー



データクラスはM3に登場し、多くのユーザーはこれらのクラスのオブジェクトをコピーして、一部のフィールドの値を置き換える機能をサポートするように要求しました(オブジェクト自体はしばしば不変です)。 M4では、この機能がサポートされています。

data class Person(val firstName: String, val lastName: String)


fun Person.asMarried(newLastName: String)
= this.copy(lastName = newLastName)


copy()関数はすべてのデータクラスに対して自動的に生成され、各パラメーターにはデフォルト値があります。したがって、コピーする場合は、値が変更されたプロパティのみを指定するだけで十分です。

Javaのバリエーション



Kotlinのジェネリッククラスを使用すると、一般的なパラメーターの分散を指定できます。コレクションライブラリには、分散を正しく示す読み取り専用インターフェイスがあるためList , List. Kotlin. Java?

M4, Kotlin -, Java. , :

fun join(l: List, separator: String): String = ...

:

String join(List<? extends Object>, String separator)


, Java List, .

...

, , , Kotlin, ... .

IntelliJ IDEA 12, , ( Community Edition ). .

!
List , List. Kotlin. Java?

M4, Kotlin -, Java. , :

fun join(l: List, separator: String): String = ...

:

String join(List<? extends Object>, String separator)


, Java List, .

...

, , , Kotlin, ... .

IntelliJ IDEA 12, , ( Community Edition ). .

!

List , List. Kotlin. Java?

M4, Kotlin -, Java. , :

fun join(l: List, separator: String): String = ...

:

String join(List<? extends Object>, String separator)


, Java List, .

...

, , , Kotlin, ... .

IntelliJ IDEA 12, , ( Community Edition ). .

!

List , List. Kotlin. Java?

M4, Kotlin -, Java. , :

fun join(l: List, separator: String): String = ...

:

String join(List<? extends Object>, String separator)


, Java List, .

...

, , , Kotlin, ... .

IntelliJ IDEA 12, , ( Community Edition ). .

!

Source: https://habr.com/ru/post/J161327/


All Articles