Cara menggunakan Kotlin Range Expressions

1. Perkenalan

Rentang adalah urutan nilai yang ditentukan oleh awal, akhir, dan langkah.

Dalam tutorial singkat ini, kita akan melihat bagaimana kita bisa mendefinisikan dan menggunakan range di Kotlin.

2. Menggunakan Kotlin Ranges

Di Kotlin, kita bisa membuat rentang menggunakan fungsi rangeTo () dan downTo () atau .. operator.

Kami dapat menggunakan rentang untuk semua jenis yang sebanding.

Secara default, mereka inklusif, yang berarti bahwa ekspresi 1..4 sesuai dengan nilai 1,2,3 dan 4.

Selain itu, ada default lain: jarak antara dua nilai, yang disebut langkah, dengan nilai implisit 1.

Jadi sekarang, mari kita lihat beberapa contoh membuat rentang dan menggunakan metode berguna lainnya untuk memanipulasinya.

2.1. Membuat Rentang

Rentang menerapkan antarmuka umum - Rentang Tertutup. Hasil dari ClosedRange adalah perkembangan ( seperti IntProgresi, LongProgresi, atau CharProgressi).

Perkembangan ini berisi awal, akhir inklusif, dan langkah dan ini adalah subtipe Iterable di mana N adalah Int, Long atau Char .

Mari kita mulai dengan melihat cara paling sederhana untuk membuat suatu range, menggunakan “..” dan di operator:

(i in 1..9)

Juga, jika kita ingin mendefinisikan rentang mundur kita bisa menggunakan operator downTo :

(i in 9 downTo 1) 

Kita juga dapat menggunakan ekspresi ini sebagai bagian dari pernyataan if untuk memeriksa apakah suatu nilai termasuk dalam rentang:

if (3 in 1..9) print("yes")

2.2. Iterating Ranges

Sekarang, sementara kita dapat menggunakan rentang dengan apa pun yang sebanding, jika kita ingin mengulang, maka kita memerlukan rentang tipe integral.

Sekarang mari kita lihat kode untuk mengulang melalui rentang:

for (i in 1.rangeTo(9)) { print(i) // Print 123456789 } for (i in 9.downTo(1)) { print(i) // Print 987654321 }

Kasus penggunaan yang sama berlaku untuk karakter:

for (ch in 'a'..'f') { print(ch) // Print abcdef } for (ch in 'f' downTo 'a') { print(ch) // Print fedcba }

3. Menggunakan Fungsi s tep ()

Penggunaan fungsi step () cukup intuitif: kita bisa menggunakannya untuk menentukan jarak antara nilai range:

for(i in 1..9 step 2) { print(i) // Print 13579 } for (i in 9 downTo 1 step 2) { print(i) // Print 97531 }

Dalam contoh ini, kami mengulangi nilai dari 1-9 ke depan dan ke belakang, dengan nilai langkah 2.

4. Menggunakan Fungsi reversed ()

Seperti namanya, fungsi reversed () akan membalik urutan rentang:

(1..9).reversed().forEach { print(it) // Print 987654321 } (1..9).reversed().step(3).forEach { print(it) // Print 963 }

5. Menggunakan Fungsi sampai ()

Saat kita ingin membuat rentang yang mengecualikan elemen akhir, kita bisa menggunakan sampai ():

for (i in 1 until 9) { print(i) // Print 12345678 }

6. Elemen langkah terakhir, pertama,

Jika kita perlu menemukan nilai pertama, langkah, atau nilai terakhir dari rentang tersebut, ada fungsi yang akan mengembalikannya kepada kita:

print((1..9).first) // Print 1 print((1..9 step 2).step) // Print 2 print((3..9).reversed().last) // Print 3

7. Rentang Penyaringan

Fungsi filter () akan mengembalikan daftar elemen yang cocok dengan predikat yang diberikan:

val r = 1..10 val f = r.filter { it -> it % 2 == 0 } // Print [2, 4, 6, 8, 10]

Kita juga bisa menerapkan fungsi lain seperti map () dan reduce () ke jangkauan kita:

val m = r.map { it -> it * it } // Print [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] val rdc = r.reduce{a, b -> a + b} // Print 55 

8. Fungsi Utilitas Lainnya

Ada banyak fungsi lain yang dapat kita terapkan ke jangkauan kita, seperti min, max, sum, average, count, different :

val r = 1..20 print(r.min()) // Print 1 print(r.max()) // Print 20 print(r.sum()) // Print 210 print(r.average()) // Print 10.5 print(r.count()) // Print 20 val repeated = listOf(1, 1, 2, 4, 4, 6, 10) print(repeated.distinct()) // Print [1, 2, 4, 6, 10] 

9. Objek Kustom

Ini juga memungkinkan untuk membuat rentang pada objek khusus. Untuk itu, satu-satunya persyaratan adalah memperluas antarmuka Comparable .

Enum adalah contoh yang bagus. Semua enum di Kotlin memperpanjang Comparable yang berarti, secara default, elemen diurutkan sesuai urutan kemunculannya.

Mari buat enum Warna cepat :

enum class Color(val rgb: Int) : Comparable { BLUE(0x0000FF), GREEN(0x008000), RED(0xFF0000), MAGENTA(0xFF00FF), YELLOW(0xFFFF00); } 

Dan kemudian gunakan di beberapa pernyataan if :

val range = red..yellow if (range.contains(Color.MAGENTA)) println("true") // Print true if (Color.RED in Color.GREEN..Color.YELLOW) println("true") // Print true if (Color.RED !in Color.MAGENTA..Color.YELLOW) println("true") // Print true

Namun, karena ini bukan tipe integral, kami tidak dapat mengulanginya. Jika kami mencoba, kami akan mendapatkan kesalahan kompilasi:

fun main(args: Array) { for (c in Color.BLUE.rangeTo(Color.YELLOW)) println(c) // for-loop range must have an iterator() method }

Dan jika kita ingin memiliki rentang kustom yang dapat kita iterasi, kita hanya perlu menerapkan ClosedRange serta Iterator.

10. Kesimpulan

Dalam artikel ini, kami mendemonstrasikan bagaimana kami dapat menggunakan ekspresi rentang di Kotlin dan berbagai fungsi yang dapat kami terapkan.

Seperti biasa, kode sumber tersedia di GitHub.