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.