【Kotlin/Android Studio】PairやTripleクラスで複数の値で異なるデータ型を返却する方法!
この記事からわかること
- Android Studio/Kotlinで異なるデータ型の複数の値を返却する方法
- PairとTripleクラスの使い方
- to関数とは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
異なるデータ型の複数の値を返却する方法
定義した関数の中から異なるデータ型の複数の値を返却したい場合や分かりやすく2つの値を返却したい場合などArray<Any?>
型やオリジナルのクラスなどを使用すれば実装することができます。しかしArray<Any?>
型での実装は型安全でないため使用するにはリスクを伴いオリジナルのクラスでは実装が少し手間です。
Kotlinではそのような場合に2つもしくは3つの異なる型を保持するPair
クラスとTriple
クラスが用意されています。
Pairクラス
data class Pair<out A, out B> : Serializable
Pair
は異なるデータ型の値を2つ保持することができるクラスです。
fun getUserInfo(): Pair<String, Int> {
return Pair("ame", 27)
}
val user = getUserInfo()
print(user.first)
print(user.second)
Pair
型ではfirst
メソッドで1つ目の要素を、second
メソッドで2つ目の要素を取得することが可能です。
イミュータブル
Pairクラスはイミュータブル(変更不可)なので、一度作成されたPairインスタンスの中身は変更できません。新しい値を設定することはできないので新しいPairインスタンスを作成する必要があります。
user.first = ""
// Error:Val cannot be reassigned
to関数でインスタンス化
先ほどはPair
のコンストラクタに渡してインスタンス化しましたがもっと簡単にインスタンス化する方法としてto
関数が用意されています。使用方法はPairにしたい要素の間で呼び出すだけです。
fun getUserInfo():Pair<String, Int> {
return "ame" to 27
}
値を分割して受ける
Pairの中の要素を一度に分割して別々の変数に格納することも可能です。その場合は以下のように実装します。
var (name,age) = getUserInfo()
print(name)
print(age)
Tripleクラス
data class Triple<out A, out B, out C> : Serializable
Triple
は異なるデータ型の値を3つ保持することができるクラスです。
fun getUserInfo(): Triple<String, Int, Int> {
return Triple("ame",27,175)
}
var user = getUserInfo()
print(user.first)
print(user.second)
print(user.third)
Triple
型ではfirst
メソッドで1つ目の要素を、second
メソッドで2つ目の要素を、third
メソッドで3つ目の要素取得することが可能です。
また基本的な使用法はPairクラスと同じでイミュータブルであり変更することはできません。またto
関数のようなものは用意されていません。
値を分割して受ける
Pair同様にTripleの中の要素を一度に分割して別々の変数に格納することも可能です。その場合は以下のように実装します。
var (name, age, height) = getUserInfo()
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。