Cara menggunakan Kotlin Range Expressions

1. Pengenalan

Julat adalah urutan nilai yang ditentukan oleh permulaan, akhir, dan langkah.

Dalam tutorial ringkas ini, kita akan melihat bagaimana kita dapat menentukan dan menggunakan rentang di Kotlin.

2. Menggunakan Kotlin Ranges

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

Kita boleh menggunakan julat untuk jenis yang setanding.

Secara lalai, mereka inklusif, yang bermaksud bahawa ungkapan 1..4 sesuai dengan nilai 1,2,3 dan 4.

Di samping itu, terdapat satu lagi lalai: jarak antara dua nilai, disebut langkah, dengan nilai tersirat 1.

Jadi sekarang, mari kita lihat beberapa contoh membuat julat dan menggunakan kaedah berguna lain untuk memanipulasinya.

2.1. Membuat Julat

Ranges melaksanakan antara muka biasa - ClosedRange. Hasil dari ClosedRange adalah kemajuan ( seperti IntProgression, LongProgression, atau CharProgression).

Perkembangan ini mengandungi bermula, tamat inklusif, dan langkah dan ia adalah satu subjenis daripada Iterable dimana N adalah Int, Long atau Char .

Mari mulakan dengan melihat kaedah termudah untuk membuat julat, dengan menggunakan ".." dan di operator:

(i in 1..9)

Juga, jika kita ingin menentukan julat ke belakang, kita boleh menggunakan pengendali downTo :

(i in 9 downTo 1) 

Kami juga dapat menggunakan ungkapan ini sebagai bagian dari pernyataan if untuk memeriksa apakah nilai tergolong dalam julat:

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

2.2. Julat Pengulangan

Sekarang, sementara kita dapat menggunakan julat dengan apa pun yang setanding, jika kita ingin melakukan iterasi, kita memerlukan julat jenis yang tidak terpisahkan.

Sekarang mari kita lihat kod untuk melakukan lelaran melalui julat:

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

Kes penggunaan yang sama berlaku untuk watak:

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

3. menggunakan s Tep () Fungsi

Penggunaan fungsi step () cukup intuitif: kita dapat menggunakannya untuk menentukan jarak antara nilai julat:

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, kita mengulangi maju dan mundur melalui nilai dari 1-9, dengan nilai langkah 2.

4. Menggunakan Fungsi terbalik ()

Seperti namanya, fungsi terbalik () akan membalikkan susunan julat:

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

5. Menggunakan sehingga () Fungsi

Apabila kita ingin membuat julat yang tidak termasuk elemen akhir kita boleh gunakan sehingga ():

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

6. Elemen langkah terakhir, pertama

Sekiranya kita perlu mencari nilai pertama, langkah atau nilai terakhir, terdapat 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. Julat Penapisan

Fungsi filter () akan mengembalikan senarai elemen yang sepadan dengan predikat tertentu:

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

Kami juga dapat menerapkan fungsi lain seperti peta () dan mengurangi () pada rentang kami:

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 Utiliti Lain

Terdapat banyak fungsi lain yang dapat kita gunakan untuk julat kita, seperti min, maks, jumlah, rata-rata, kiraan, berbeza :

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 Tersuai

Anda juga boleh membuat julat atas objek tersuai. Untuk itu, satu-satunya syarat adalah memperluas antara muka yang boleh dibandingkan .

Enum adalah contoh yang baik. Semua enum di Kotlin meluas Berbanding yang bermaksud, secara lalai, elemen disusun mengikut urutan yang muncul.

Mari buat enum Warna pantas :

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

Dan kemudian gunakannya dalam beberapa pernyataan jika :

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, kerana ini bukan jenis yang tidak terpisahkan, kami tidak dapat mengulanginya. Sekiranya kita mencuba, kita akan mendapat ralat penyusunan:

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 mempunyai rentang khusus yang dapat kita ulangi , kita hanya perlu menerapkan ClosedRange dan juga Iterator.

10. Kesimpulannya

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

Seperti biasa kod sumber tersedia di GitHub.