Masukkan Password
10 Kursus Kotlin Lengkap #10 - Pasangan dalam Kotlin - Tutorial Kotlin untuk Pemula
Materi ini membahas Pair dan Triple di Kotlin. Ini penting karena mulai mengenalkan cara menyimpan beberapa nilai yang saling berhubungan dalam satu objek.
Saya jelaskan dari konsep paling dasar dulu, lalu masuk ke syntax, first, second, operator to, type inference, dan beberapa bagian subtitle yang perlu diluruskan.
1. Kenapa kita membutuhkan Pair dan Triple?
Bayangkan kita punya koordinat pada bidang 2D.
Sebuah titik membutuhkan:
X
Y
Misalnya:
(2, 3)
Artinya:
X = 2
Y = 3
Daripada membuat dua variable terpisah:
val x = 2
val y = 3
kita bisa mengelompokkannya:
val coordinates = Pair(2, 3)
Sekarang coordinates menyimpan dua nilai yang berhubungan.
2. Apa itu Pair?
Pair adalah tipe Kotlin yang digunakan untuk menyimpan dua nilai dalam satu pasangan.
Bentuk sederhananya:
Pair(first, second)
Contoh:
val coordinates = Pair(2, 3)
Secara konsep:
coordinates
│
▼
┌─────────────┐
│ first = 2 │
│ second = 3 │
└─────────────┘
Jadi Pair mempunyai dua posisi:
| Posisi | Nama |
|---|---|
| Nilai pertama | first |
| Nilai kedua | second |
3. Contoh koordinat X dan Y
Misalnya:
val coordinates = Pair(2, 3)
Kita bisa menganggap:
first → X = 2
second → Y = 3
Kemudian:
println(coordinates.first)
menghasilkan:
2
Sedangkan:
println(coordinates.second)
menghasilkan:
3
4. Cara membuat Pair secara eksplisit
Di video digunakan bentuk seperti:
val coordinates: Pair<Int, Int> = Pair(2, 3)
Memang terlihat panjang, tetapi sangat bagus untuk belajar.
Mari kita pecah:
val → variable yang tidak bisa di-reassign
coordinates → nama variable
Pair<Int, Int> → tipe datanya
Pair(2, 3) → nilai Pair
Jadi:
val coordinates: Pair<Int, Int> = Pair(2, 3)
berarti:
Buat variable
coordinatesyang bertipePair, dengan nilai pertamaIntdan nilai kedua jugaInt, kemudian isinya adalah2dan3.
5. Apa arti <Int, Int>?
Ini bagian yang kemungkinan terlihat aneh:
Pair<Int, Int>
Kenapa ada < >?
Ini berhubungan dengan konsep generic.
Untuk sementara belum perlu memahami generic secara mendalam. Cukup pahami bahwa:
Pair<Int, Int>
berarti:
Pair ini memiliki dua nilai, dan keduanya bertipe
Int.
Misalnya:
Pair<Int, Int>
berarti:
first → Int
second → Int
Sedangkan:
Pair<String, String>
berarti:
first → String
second → String
Dan:
Pair<String, Int>
berarti:
first → String
second → Int
6. Pair tidak harus berisi tipe yang sama
Ini salah satu hal yang sangat penting.
Pair tidak harus:
Pair<Int, Int>
Kita bisa mencampur tipe.
Contoh:
val person = Pair("Andi", 20)
Di sini:
first → String
second → Int
Secara tipe:
Pair<String, Int>
Contoh lain:
val data = Pair("Kotlin", true)
Tipe:
Pair<String, Boolean>
Artinya:
first → "Kotlin" → String
second → true → Boolean
7. Pair dengan Double
Video juga memberikan contoh:
val coordinates = Pair(4.1, 2.4)
Kotlin akan mengetahui bahwa:
4.1 → Double
2.4 → Double
Sehingga tipe Pair-nya secara konsep:
Pair<Double, Double>
Kita tidak perlu menuliskan:
val coordinates: Pair<Double, Double> = Pair(4.1, 2.4)
karena Kotlin dapat menyimpulkannya.
8. Pair dengan tipe berbeda
Misalnya:
val data = Pair(10, 3.5)
Kotlin akan mengetahui:
first → 10 → Int
second → 3.5 → Double
Jadi:
Pair<Int, Double>
Ini menunjukkan bahwa kedua nilai dalam Pair boleh berbeda tipe.
9. Type inference pada Pair
Ini melanjutkan materi sebelumnya tentang type inference.
Kita bisa menulis:
val coordinates: Pair<Int, Int> = Pair(2, 3)
Tetapi Kotlin sebenarnya sudah bisa mengetahui tipe tersebut:
val coordinates = Pair(2, 3)
Kotlin melihat:
2 → Int
3 → Int
maka Kotlin menyimpulkan:
coordinates → Pair<Int, Int>
Jadi kita tidak perlu selalu menuliskan tipe secara manual.
10. Tiga cara membuat Pair
Sekarang kita bisa melihat tiga bentuk yang dibahas video.
Cara 1 — eksplisit
val coordinates: Pair<Int, Int> = Pair(2, 3)
Sangat jelas, tetapi panjang.
Cara 2 — menggunakan type inference
val coordinates = Pair(2, 3)
Lebih singkat.
Kotlin otomatis mengetahui:
Pair<Int, Int>
Cara 3 — menggunakan operator to
Kotlin memiliki syntax khusus:
val coordinates = 2 to 3
Ini juga menghasilkan Pair.
Secara sederhana:
2 to 3
dapat dipahami sebagai:
Pair(2, 3)
Jadi ketiganya secara konsep menghasilkan Pair yang sama:
val a: Pair<Int, Int> = Pair(2, 3)
val b = Pair(2, 3)
val c = 2 to 3
11. Apa itu operator to?
Ini syntax Kotlin yang sangat nyaman.
Contoh:
val person = "Andi" to 20
Hasilnya adalah Pair:
first → "Andi"
second → 20
Secara konsep:
Pair("Andi", 20)
Jadi:
"Andi" to 20
bisa dipahami sebagai:
buat pasangan
"Andi"dan20.
12. to bukan hanya untuk angka
Contoh:
val student = "Andi" to 90
Artinya:
first → "Andi"
second → 90
Kita bisa mengambil:
println(student.first)
Output:
Andi
Dan:
println(student.second)
Output:
90
Ini sering menjadi bentuk yang nyaman ketika membuat pasangan data.
13. Cara mengambil data dari Pair
Misalnya:
val coordinates = 2 to 3
Kita bisa mengambil nilai pertama dengan:
coordinates.first
dan nilai kedua:
coordinates.second
Contoh lengkap:
fun main() {
val coordinates = 2 to 3
println(coordinates.first)
println(coordinates.second)
}
Output:
2
3
14. Kenapa namanya first dan second?
Karena Pair tidak secara otomatis tahu bahwa kita ingin menyebutnya x dan y.
Kotlin hanya mengetahui:
nilai pertama
nilai kedua
Maka property-nya disebut:
first
second
Kalau kita menggunakan koordinat:
first → X
second → Y
Tetapi kalau digunakan untuk data orang:
first → name
second → age
Contoh:
val person = "Andi" to 20
Maka:
person.first
adalah:
Andi
dan:
person.second
adalah:
20
15. Pair itu seperti kotak dua ruang
Mental model yang bagus:
Bayangkan Pair sebagai kotak yang mempunyai dua slot.
┌──────────────────────────┐
│ Pair │
├────────────┬─────────────┤
│ first │ second │
│ 2 │ 3 │
└────────────┴─────────────┘
Kalau:
val coordinates = Pair(2, 3)
maka:
coordinates.first → 2
coordinates.second → 3
16. Lalu apa itu Triple?
Kalau Pair menyimpan dua nilai, maka Triple menyimpan tiga nilai.
Contoh koordinat 3D:
X
Y
Z
Misalnya:
(2, 3, 5)
Kita bisa membuat:
val coordinates = Triple(2, 3, 5)
Sekarang ada tiga nilai:
first → 2
second → 3
third → 5
17. Mengakses Triple
Contoh:
val coordinates = Triple(2, 3, 5)
println(coordinates.first)
println(coordinates.second)
println(coordinates.third)
Output:
2
3
5
Jadi:
| Tipe | Isi |
|---|---|
Pair | first, second |
Triple | first, second, third |
18. Triple juga bisa memiliki tipe berbeda
Tidak harus semuanya Int.
Misalnya:
val data = Triple("Andi", 20, true)
Tipe secara konsep:
Triple<String, Int, Boolean>
Isinya:
first → "Andi"
second → 20
third → true
Kita bisa mengambilnya:
println(data.first)
println(data.second)
println(data.third)
Output:
Andi
20
true
19. Pair dan Triple sebenarnya berguna untuk apa?
Contoh koordinat adalah cara paling mudah untuk memahami konsepnya.
Tetapi dalam program nyata, kita bisa memiliki data seperti:
Nama dan umur
val person = "Andi" to 20
Produk dan harga
val product = "Laptop" to 15000000
Nama dan status login
val user = "Andi" to true
Koordinat
val point2D = Pair(10, 20)
Data 3 nilai
val point3D = Triple(10, 20, 30)
20. Tapi kenapa tidak membuat variable biasa saja?
Pertanyaan bagus.
Daripada:
val x = 10
val y = 20
kita bisa membuat:
val point = Pair(10, 20)
Sekarang point menjadi satu unit data.
Ini berguna ketika kita ingin mengirim, mengembalikan, atau menyimpan dua nilai yang saling berhubungan sebagai satu kesatuan.
Misalnya nanti sebuah function bisa mengembalikan dua nilai:
fun getCoordinates(): Pair<Int, Int> {
return Pair(10, 20)
}
Nanti materi function akan membuat penggunaan seperti ini jauh lebih jelas.
21. Apakah Pair/Triple bisa menyimpan lebih dari angka?
Bisa.
Misalnya:
val person = Triple("Andi", 20, "Madiun")
Secara konsep:
first → "Andi"
second → 20
third → "Madiun"
Tipe:
Triple<String, Int, String>
Jadi Pair dan Triple tidak khusus untuk koordinat.
Koordinat hanyalah contoh yang mudah dipahami.
22. Bagaimana kalau butuh 4 nilai?
Di sinilah subtitle mengatakan bahwa kita bisa menggunakan data class.
Misalnya kita punya data mahasiswa:
Nama
Umur
Kota
Nilai
Daripada membuat:
Pair(...)
tidak ada Quadruple standar Kotlin yang umum seperti Pair dan Triple.
Untuk data yang memiliki banyak field dan memiliki makna yang jelas, biasanya lebih baik menggunakan data class.
Contohnya nanti:
data class Student(
val name: String,
val age: Int,
val city: String,
val score: Int
)
Kemudian:
val student = Student(
"Andi",
20,
"Madiun",
90
)
Ini jauh lebih jelas daripada:
Triple("Andi", 20, "Madiun")
apalagi kalau datanya lebih banyak.
23. Pair vs data class
Misalnya kita punya:
val person = Pair("Andi", 20)
Kita harus mengingat:
first = nama
second = umur
Sedangkan data class:
data class Person(
val name: String,
val age: Int
)
Kemudian:
val person = Person("Andi", 20)
Kita bisa langsung menulis:
person.name
person.age
Ini jauh lebih deskriptif.
Jadi secara umum:
Pair/Triple cocok untuk data kecil dan sederhana.
Data class lebih cocok ketika setiap nilai memiliki identitas/makna yang jelas dan datanya mulai kompleks.
24. Yang perlu diluruskan dari subtitle
Ada beberapa bagian yang penting untuk dikoreksi.
❌ “The pair or triple are types that represent data composed of two or three values of any type.”
Ini secara konsep cukup benar, tetapi “any type” jangan dipahami sebagai satu Pair bisa memiliki jumlah/type sembarang tanpa aturan.
Contohnya:
Pair<Int, String>
valid.
Triple<String, Int, Boolean>
valid.
Tetapi Pair tetap tepat dua nilai, dan Triple tetap tepat tiga nilai.
❌ “If you want more than three values, use data class.”
Ini terlalu menyederhanakan.
Data class memang pilihan yang sangat baik untuk data dengan beberapa field yang memiliki makna, tetapi bukan berarti setiap kali jumlahnya lebih dari tiga wajib menggunakan data class.
Kita juga punya collection seperti:
List
Set
Map
tergantung kebutuhan.
⚠️ “Diamond”
Subtitle menyebut tanda:
<Int, Int>
sebagai “diamond”.
Lebih tepat menyebutnya angle brackets atau kurung sudut:
< >
Dalam konteks Kotlin:
Pair<Int, Int>
bagian tersebut berkaitan dengan generic type arguments.
Untuk sekarang tidak perlu mendalami generic dulu.
❌ “Type interface”
Subtitle beberapa kali mengatakan:
type interface
Istilah yang benar adalah:
type inference
Sama seperti materi sebelumnya.
Contoh:
val coordinates = Pair(2, 3)
Kotlin melakukan type inference dan mengetahui bahwa:
coordinates → Pair<Int, Int>
25. Hubungkan dengan materi sebelumnya
Sekarang coba kita sambungkan semua materi yang sudah kamu pelajari.
Kita sudah punya:
Int
Double
Float
Char
Boolean
String
Sekarang Kotlin memberi kita cara untuk mengelompokkan beberapa nilai:
Pair
↓
2 nilai
Triple
↓
3 nilai
Contohnya:
val data = Pair("Andi", 20)
Di sini kita menggunakan beberapa konsep sekaligus:
"Andi"
↓
String
20
↓
Int
String + Int
↓
Pair<String, Int>
26. Ringkasan syntax yang perlu diingat
Pair dengan syntax lengkap
val coordinates: Pair<Int, Int> = Pair(2, 3)
Pair dengan type inference
val coordinates = Pair(2, 3)
Pair menggunakan to
val coordinates = 2 to 3
Mengambil nilai pertama
coordinates.first
Mengambil nilai kedua
coordinates.second
Triple
val coordinates = Triple(2, 3, 5)
Mengambil nilainya:
coordinates.first
coordinates.second
coordinates.third
27. 🧠 Cara mengingatnya
Bayangkan:
Pair
Pair
┌─────────┬─────────┐
│ first │ second │
│ 2 │ 3 │
└─────────┴─────────┘
Triple
Triple
┌─────────┬─────────┬─────────┐
│ first │ second │ third │
│ 2 │ 3 │ 5 │
└─────────┴─────────┴─────────┘
Dan syntax paling mudahnya:
val pair = 2 to 3
val triple = Triple(2, 3, 5)
Kesimpulan
Inti video ini sebenarnya sederhana:
Pairdigunakan untuk mengelompokkan 2 nilai yang berhubungan, sedangkanTripledigunakan untuk mengelompokkan 3 nilai yang berhubungan.
Contoh paling dasar:
val point2D = Pair(10, 20)
println(point2D.first) // 10
println(point2D.second) // 20
dan:
val point3D = Triple(10, 20, 30)
println(point3D.first) // 10
println(point3D.second) // 20
println(point3D.third) // 30
Serta syntax singkat Pair:
val point = 10 to 20
Yang paling penting untuk sekarang bukan menghafal generic-nya, tetapi memahami pola:
Pair → 2 nilai → first + second
Triple → 3 nilai → first + second + third
Nanti ketika masuk ke Generic, Function, Collection, dan Data Class, penggunaan Pair dan Triple akan terasa jauh lebih masuk akal.