Kotlinには、2つの値を1つのオブジェクトとして扱うための便利な型として「Pair」が用意されています。
例えば「名前と年齢」「キーと値」「座標のXとY」など、関連する2つの値を簡単にまとめることができます。
この記事では、KotlinのPairについて以下の内容を詳しく解説します。
- Pairとは何か
- Pairの作り方
- 値の取り出し方
- 分解宣言
toを使ったPairの生成- Mapとの関係
- Pairを使うべきケースと使わない方がよいケース
Kotlin初心者から実務レベルまで理解できるよう、順番に解説していきます。
Pairとは
Pairは、2つの値を保持するためのデータクラスです。
型定義は次のようになっています。
data class Pair<out A, out B>(
val first: A,
val second: B
)
つまりPairは、
firstsecond
という2つのプロパティを持ち、それぞれ任意の型を格納できます。
例えば次のように使用します。
val pair = Pair("Apple", 100)
この場合、値は次のように保持されます。
first = "Apple"
second = 100
このように、2つの関連データを1つのオブジェクトとして扱えるのがPairの特徴です。
Pairの作り方
Pairは Pair() コンストラクタを使って作成できます。
val pair = Pair("Tokyo", 14000000)
Kotlinでは型推論が働くため、型は自動的に次のように決定されます。
Pair<String, Int>
型を明示することも可能です。
val pair: Pair<String, Int> = Pair("Tokyo", 14000000)
Pairの値の取り出し方
Pairの値は、first と second を使って取得できます。
val pair = Pair("Apple", 100)
println(pair.first)
println(pair.second)
出力
Apple
100
例えば、座標データとして使うこともできます。
val position = Pair(10, 20)
println(position.first) // x座標
println(position.second) // y座標
分解宣言(Destructuring)
Kotlinでは、Pairを分解宣言で取り出すことができます。
val pair = Pair("Apple", 100)
val (name, price) = pair
println(name)
println(price)
出力
Apple
100
これは内部的に
component1()
component2()
という関数が呼び出されています。
Pairは data class なので、これらの関数が自動生成されています。
to を使ったPairの生成
Kotlinでは to という infix関数を使って、簡単にPairを作ることができます。
val pair = "Apple" to 100
この式の評価結果は次の型になります。
Pair<String, Int>
つまり to は Pairを生成する関数として使われることが多い構文です。
例
val user = "Taro" to 25
Pairの実践的な使い方
Pairは実務でもさまざまな場面で使われます。
Mapを作るとき
KotlinではMapを作るときに、Pairがよく使われます。
val map = mapOf(
"apple" to 100,
"banana" to 150,
"orange" to 200
)
このとき
"apple" to 100
は Pair<String, Int> を生成しており、mapOf() にキーと値の組として渡されています。
関数の戻り値として使う
複数の値を返したい場合にもPairを使えます。
fun getUser(): Pair<String, Int> {
return "Taro" to 20
}
呼び出し側では分解宣言が使えます。
val (name, age) = getUser()
一時的なデータ構造
簡単なデータを一時的にまとめたいときにも便利です。
val list = listOf(
"A" to 10,
"B" to 20,
"C" to 15
)
Pairを使うべきケース
Pairは次のようなケースに向いています。
- 簡単な値の組み合わせ
- 一時的なデータ
- Map作成時のキーと値
- 関数の簡単な戻り値
例
return result to message
Pairを使わない方がよいケース
Pairは便利ですが、意味のあるデータ構造には向いていない場合があります。
例えば次のコードです。
val user = Pair("Taro", 20)
この場合
first = ?
second = ?
となり、データの意味が分かりにくいという問題があります。
このような場合は、専用のデータクラスを作る方が読みやすくなります。
data class User(
val name: String,
val age: Int
)
val user = User("Taro", 20)
このようにすると、コードの可読性が大きく向上します。
PairとTripleの違い
Kotlinには、3つの値をまとめるための Triple という型もあります。
val triple = Triple("A", 10, true)
Tripleは次のプロパティを持っています。
first
second
third
まとめ
KotlinのPairは、2つの値をまとめるためのシンプルなデータクラスです。
主な特徴をまとめると次の通りです。
| 特徴 | 内容 |
|---|---|
| 型 | data class |
| プロパティ | first / second |
| 生成方法 | Pair(a, b) または a to b |
| 用途 | Map生成、戻り値、一時データ |
| 注意点 | 意味のあるデータにはdata classが適している |
Pairはシンプルで便利ですが、データの意味が重要な場合には専用の型を設計することが推奨されます。
以上、KotlinのPairについてでした。
最後までお読みいただき、ありがとうございました。










