Kotlin M3リリース

プログラミング言語は着実に開発されています。KotlinM3をリリースしました。これは、 ホームページの更新からスクリプトモードのサポートまで、多くの興味深いものを含んだ大きなマイルストーンです。 私たちのチームはまた、積極的な「ドッグフーディング」を開始しました。近い将来、Kotlinプロジェクトのより多くのコードがKotlinで作成されます。



この投稿では、M3で行われた2つの最も興味深いこと、コレクション宣言の多重宣言と「分割」について簡単に説明します。



複数の宣言





それはどのように見えますか。 Kotlinでは、たとえば次のコードを記述できます。



val map = hashMap("one" to 1, "two" to 2, "three" to 3) for ((k, v) in map) { println("$k -> $v") }
      
      







forで1つの変数が宣言されているのはなく、括弧で2つの変数が宣言されいることに注意してください。 これは、複数の宣言または「複数の宣言」の一例です。 より簡単な例:



 val (a, b) = pair
      
      







この宣言の結果として、互いに完全に独立して使用できる2つの変数が表示されます。



どのように機能しますか? 最後の例の宣言は、次のコードに変換されます。

 val a = pair.component1() val b = pair.component2()
      
      







Kotlinの他の多くの事柄と同様に、複数宣言は規則に基づいています。componentN()関数は名前で呼び出されます。つまり、ペアクラスとその外部の両方でextensionsとして宣言できます。 これにより、冒頭に示したようにマップをバイパスできます。Map.Entryに対して2つの拡張関数が宣言されています。

 fun <K, V> Map.Entry<K, V>.component1() = getKey() fun <K, V> Map.Entry<K, V>.component2() = getValue()
      
      







一般的なケースでは、各クラスはそのような関数を独自の方法で実装する必要がありますが、非常に一般的なケースが1つあります。クラスがデータを単純に格納し、他に何もしない場合です。 これは「データクラス」と呼ばれます。



 data class User(val name: String, val password: String) {}
      
      







「data」アノテーションは、このクラスでいくつかの標準メソッドを生成するようコンパイラーに指示します:equals()/ hashCode()、toString()およびcomponent1()、component2()。 これらの関数はすべて、プライマリコンストラクターで宣言されたクラスプロパティを使用します。たとえば、component1()は名前を返し、component2()はパスワードを返します。



 val (name, pass) = getUser()
      
      







特に、データクラスを使用すると、タプルを使用せずに関数から複数の値を返すことができ、コードの可読性が大幅に向上します。 タプルを完全に削除することにしましたが、タプルを使用する何らかの種類のKotlinコードがある場合は、タプルを自動的に移行できます



この投稿の複数の宣言の詳細は英語です。



コレクションの種類





コレクションはどこでも常に使用されるため、プログラミング言語の利便性は、ライブラリの対応する部分の設計に依存します。 Javaプラットフォームの多くの「代替」言語が標準ライブラリと互換性のない独自のコレクションを使用している理由は、Javaライブラリを使用する際にさまざまな困難を生み出します(これが大半であり、Javaが素晴らしいプラットフォームであるためです)。



Kotlinは既存のコードとの互換性に重点を置いているため、標準のコレクションクラスを使用しますが、それらを改善します

画像



コレクションインターフェイスは読み取り専用と可変に分かれていることに注意してください。 古き良きjava.util.ArrayListとHashSetはまだ利用可能です-これらは変更可能なコレクションです。 ただし、リスト<String>のみがどこかに書き込まれている場合、変更することはできません。



これは物事を整理するのに役立つだけでなく、生活を簡素化するのにも役立ちます。不変のコレクションは共変なので、リスト<String>をリスト<Any>が期待される場所に割り当てることができます。



おわりに





M3には他にも多くの興味深いものが含まれています。 詳細については、 こちらをご覧ください (英語)。



インストール手順はこちらですIntelliJ IDEA 12が必要です)。



いつものように、私たちはあなたのコメント/考え/提案に感謝します。 素敵なコトリンがあります :)



All Articles