データクラスとタプル【Android/Kotlin】





データクラス


classを構造体のデータ管理するために使いたい場合に、次のようにプロパティだけもたせたクラスを作ることがあるだろう。



このようなクラスは、修飾子dataをつけることで大変良いことが起こる。



自動で次のようなメソッドを実装してくれるのだ。

* equals()
* hashCode()
* toString()
* copy()
* componentN()





分解宣言


例えば、componentN()のメソッドが実装されたおかげで、次のように一度に変数をマッピングして取り出せる。



これを 分解宣言(destructuring declaration) と呼ぶ。

もし、修飾子dataをつけなかったら、自前でcomponentNを実装しなければならない。






Triple


ところで、KotlinにはSwiftやPythonのような可変可能なタプルは存在しない。しかし内容が限定されたPairやTripleといったクラスが用意されている。例えばTripleはこんな感じ。



データクラスで行った分解宣言と似ていないだろうか?

それもそのはず、PairやTripleもデータクラスなのだ!


Tripleの定義をみると次のようになっている。



修飾子out は、ジェネリック関数の型投影で共変を意味する。これによって、様々な任意の型の値を引数に渡せるようになるのだ。





Quadruple


Kotlin標準関数であるTripleの定義を真似て、Quadruple (クオドルプル)を作ってみよう。



Tripleの定義にプロパティquad を追加しただけで、とても簡単にQuadrupleが出来上がった。

それでは、実行してみよう。




実行してみると次のように出力された。

Quadruple data is (5, 汐華初流乃, しおばなはるの, ゴールド・エクスペリエンス)
[5, 汐華初流乃, しおばなはるの, ゴールド・エクスペリエンス]


1行目は、toString()をオーバーライドしているので期待通りの結果だ。

2行目は、listの中身が表示されている。今回、Quadrupleの値がInt型とString型の複数を持っているため、toListメソッドで返されるListはList<Any>型になっているので注意だ。





Pair


最後に、Pair型も使ってみよう。List<Pair>型のようなリストをfor文で回すと、次のように値を取りだせる。すでに分解宣言を知っているので、まったく不思議ではない。



ところで、Pair型のオブジェクトを作るときは次のように書くことができる。



これはMap型のオブジェクトを作るときにやっていることだ。

だから当然、Map型もPair型と同じようにfor文でkeyとvalueをマッピングできるわけだ。




Kotlinプログラミング

Kotlinは、Javaとの相互運用を可能にし、Android OSでGoogleがフルサポートする静的型プログラミング言語です。この言語は、Javaだけでは十全ではない(Javaだけでは実装に手間がかかりすぎる)、軽量かつ豊かな表現形式や、他言語ではすでに実装されている最新の機能を盛り込んでいます。

KindleAmazon

基本からしっかり身につくAndroidアプリ開発入門

圧倒的な多数のユーザーが使っているヤフーのアプリ。その制作の最前線にいる黒帯エンジニアが、ユーザーが使いやすいアプリの大切な基本をしっかりと解説します。

KindleAmazon




参考


Basic Syntax (Kotlin Reference)
Idioms (Kotlin Reference)


あなたにおすすめ