Kako se koriste izrazi Kotlin Range
1. Uvod
Raspon je niz vrijednosti definiranih početkom, krajem i korakom.
U ovom ćemo brzom vodiču pogledati kako možemo definirati i koristiti raspone u Kotlinu.
2. Korištenje kotlinskih područja
U Kotlinu možemo stvoriti domete pomoću rangeTo () i do() funkcije ili .. operatora.
Raspone možemo koristiti za bilo koji usporedivi tip.
Prema zadanim postavkama uključuju, što znači da izraz 1..4 odgovara vrijednostima 1,2,3 i 4.
U Dodatku, postoji još jedna zadana vrijednost: udaljenost između dvije vrijednosti, nazvane korak, s implicitnom vrijednošću 1.
Dakle, pogledajmo nekoliko primjera stvaranja raspona i korištenja drugih korisnih metoda za manipulaciju njima.
2.1. Stvaranje raspona
Rasponi implementiraju zajedničko sučelje - ClosedRange. Rezultat a ClosedRange je progresija (kao što su IntProgression, LongProgression, ili CharProgression).
Ova progresija sadrži početak, uključivi kraj i korak i ona je podvrsta Iterativ gdje je N Int, dugo ili Char.
Krenimo s gledanjem najjednostavnijeg načina stvaranja raspona pomoću ".." i u operateri:
(i u 1..9)
Također, ako želimo definirati unatrag raspon, možemo koristiti do operater:
(ja u 9 dolje na 1)
Ovaj izraz također možemo koristiti kao dio ako izjava za provjeru pripada li vrijednost rasponu:
if (3 u 1..9) ispis ("da")
2.2. Rasponi za ponavljanje
Sada, iako možemo koristiti domete s bilo čime usporedivim, ako želimo ponoviti, tada nam treba integralni raspon tipa.
Sada pogledajmo kod za itiranje kroz raspon:
za (i u 1.rangeTo (9)) {print (i) // Ispis 123456789} za (i u 9.downTo (1)) {print (i) // Ispis 987654321}
Isti slučaj upotrebe odnosi se na znakove:
for (ch in 'a' .. 'f') {print (ch) // Print abcdef} for (ch in 'f' downTo 'a') {print (ch) // Print fedcba}
3. Korištenjem step () Funkcija
Korištenje korak() funkcija je prilično intuitivna: pomoću nje možemo definirati udaljenost između vrijednosti raspona:
za (i u 1..9 korak 2) {print (i) // Ispis 13579} za (i u 9 dolje na 1 korak 2) {print (i) // Ispis 97531}
U ovom primjeru ponavljamo naprijed i natrag kroz vrijednosti od 1-9, s vrijednošću koraka 2.
4. Korištenje obrnuto () Funkcija
Kao što i samo ime govori, obrnuto () funkcija će preokrenuti redoslijed raspona:
(1..9) .reversed (). ForEach {print (it) // Print 987654321} (1..9) .reversed (). Step (3) .forEach {print (it) // Print 963}
5. Korištenje do() Funkcija
Kada želimo stvoriti raspon koji isključuje krajnji element koji možemo koristiti do():
za (i u 1 do 9) {print (i) // Ispis 12345678}
6. The posljednji,prvi,korak Elementi
Ako trebamo pronaći prvu, korak ili zadnju vrijednost raspona, postoje funkcije koje će nam ih vratiti:
print ((1..9) .first) // Print 1 print ((1..9 step 2) .step) // Print 2 print ((3..9) .reversed (). last) // Ispis 3
7. Rasponi filtriranja
The filtar() funkcija će vratiti popis elemenata koji odgovaraju zadanom predikatu:
val r = 1..10 val f = r.filter {it -> it% 2 == 0} // Ispis [2, 4, 6, 8, 10]
Možemo primijeniti i druge funkcije kao što su karta() i smanjiti() u naš asortiman:
val m = r.map {it -> it * it} // Ispis [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] val rdc = r.reduce {a, b -> a + b} // Ispis 55
8. Ostale korisne funkcije
Postoje mnoge druge funkcije koje možemo primijeniti na svoj asortiman, poput min, max, zbroj, prosjek, brojanje, različito:
val r = 1..20 print (r.min ()) // Ispis 1 print (r.max ()) // Print 20 print (r.sum ()) // Print 210 print (r.average () ) // Ispis 10.5 print (r.count ()) // Ispis 20 val ponovljeno = listOf (1, 1, 2, 4, 4, 6, 10) print (repeat.distinct ()) // Ispis [1, 2, 4, 6, 10]
9. Prilagođeni objekti
Također je moguće stvoriti raspon preko prilagođenih objekata. Zbog toga je jedini zahtjev produžiti Usporedive sučelje.
Enum je dobar primjer. Proširuju se svi popisi u Kotlinu Usporedive što znači da se prema zadanim postavkama elementi razvrstavaju u slijedu u kojem se pojavljuju.
Stvorimo brzo Boja nabrajanje:
enum klasa Boja (val rgb: Int): Usporediva {PLAVA (0x0000FF), ZELENA (0x008000), CRVENA (0xFF0000), MAGENTA (0xFF00FF), ŽUTA (0xFFFF00); }
A zatim ga upotrijebite u nekima ako izjave:
raspon val = crvena..žuta ako (range.contens (Color.MAGENTA)) println ("true") // Ispiši true if (Color.RED u Color.GREEN..Color.YELLOW) println ("true") / / Ispis istinito ako (Color.RED! U boji.MAGENTA..Color.YELLOW) println ("true") // Ispis true
Međutim, kako ovo nije integralni tip, ne možemo ga ponoviti. Ako pokušamo, dobit ćemo pogrešku u kompilaciji:
fun main (args: Array) {for (c u Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop raspon mora imati metodu iteratora ()}
A ako želimo imati prilagođeni raspon koji možemo ponoviti, samo ga trebamo implementirati ClosedRange kao i Iterator.
10. Zaključak
U ovom smo članku pokazali kako možemo koristiti izraze raspona u Kotlinu i različite funkcije koje možemo primijeniti.
Kao i uvijek izvorni kod dostupan je na GitHub-u.