プログラミング言語のもう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 ). .
!