その他のアップデート
最後に、細かいアップデートを落穂拾い的に3個、バージョン順に紹介します。
型エイリアス
バージョン1.1で型エイリアスが導入されました。これは、リスト12のコードのように、typealiasキーワードを利用します。リスト12のように、関数型に名前をつける際に便利です。
typealias BMICallback = (String, Double, Double) -> Unit
値列挙の最後にカンマを残すことが可能
バージョン1.4で、値を列挙する際の最後にカンマを残しておけるようにアップデートされています。このサンプルは、実はすでに登場しており、リスト10のtaroの最後のageデータのコードが該当します。35の次にカンマが記述されています。これが、バージョン1.3まではエラーとなりましたが、1.4でエラーとならないようにアップデートされています。
ノンナル型定義
バージョン1.7で「& Any」という型指定の構文が導入されました。この構文は、Kotlinのみでコーディングしている場合には不要なものですが、Android開発のようにJavaの@NotNullアノテーションに対応するために導入されたものです。
例えば、リスト13のようなJavaでのインターフェース定義があるとします。@NotNullアノテーションが含まれているのが特徴です。
public interface DataProcess<T> { void init(T baseData); @NotNull T doProcess(@NotNull T processParam); }
このインターフェースであるDataProcessの子インターフェースをKotlinで定義しようとします。すると、リスト14のコードとなります。
interface PersonalDataProcess<E> : DataProcess<E> { override fun init(baseData: E) override fun doProcess(processParam: E & Any): E & Any fun replay() }
リスト14でのポイントは、doProcess()における引数と戻り値の型指定です。リスト13のDataProcessのinit()の引数の型と、doProcess()の引数の型と戻り値の型は、全て同じT型です。ただし、init()の引数はナラブルである一方で、doProcess()の引数と戻り値は、@NotNullアノテーションが付与されているため、ノンナルです。
これをKotlinで表現する場合、リスト14のようになります。オーバーライドしたinit()の引数の型はEとしています。このEはナラブルとなり得るため、そのままdoProcess()の引数と戻り値の型として記述するわけにはいきません。そのために用意された記述が、「& Any」です。リスト14のように「E & Any」とすることで、ノンナルのEを表すことができます。
まとめ
Kotlinのバージョン2.0までに導入された新機能をテーマごとに紹介する本連載の第1回目は、いかがでしたでしょうか。
今回は連載の概要と、テーマとしては1回分には満たない分量の詰め合わせとして、whenのアップデート、lateinitのアップデート、新しいアンダースコア演算子、そしてその他のアップデートに関して3個紹介しました。
次回は、関数に関するアップデートをテーマに紹介します。