【Kotlin/Android Studio】PairやTripleクラスで複数の値で異なるデータ型を返却する方法!

【Kotlin/Android Studio】PairやTripleクラスで複数の値で異なるデータ型を返却する方法!

この記事からわかること

  • Android Studio/Kotlin異なるデータ型複数返却する方法
  • PairTripleクラス使い方
  • to関数とは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

異なるデータ型の複数の値を返却する方法

定義した関数の中から異なるデータ型の複数の値を返却したい場合や分かりやすく2つの値を返却したい場合などArray<Any?>型やオリジナルのクラスなどを使用すれば実装することができます。しかしArray<Any?>型での実装は型安全でないため使用するにはリスクを伴いオリジナルのクラスでは実装が少し手間です。

Kotlinではそのような場合に2つもしくは3つの異なる型を保持するPairクラスとTripleクラスが用意されています。

Pairクラス

公式リファレンス: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クラス

公式リファレンス: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()

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index