Hvordan bruke Kotlin Range Expressions

1. Introduksjon

Et område er en rekke verdier definert av en start, en slutt og et trinn.

I denne raske opplæringen vil vi se på hvordan vi kan definere og bruke områder i Kotlin.

2. Bruke Kotlin Ranges

I Kotlin kan vi opprette områder ved hjelp av rekkevidde til () og ned til() funksjoner eller .. -operatøren.

Vi kan bruke områder for alle sammenlignbare typer.

Som standard er de inkluderende, som betyr at uttrykket 1..4 tilsvarer verdiene 1,2,3 og 4.

I tillegg, det er en annen standard: avstanden mellom to verdier, kalt et trinn, med en implisitt verdi på 1.

Så la oss ta en titt på noen få eksempler på å opprette områder og bruke andre nyttige metoder for å manipulere dem.

2.1. Opprette områder

Områder implementerer et felles grensesnitt - ClosedRange. Resultatet av en ClosedRange er en progresjon (som for eksempel IntProgression, LongProgression, eller CharProgression).

Denne progresjonen inneholder en start, en inkluderende slutt og et trinn, og det er en undertype av Iterabel der N er Int, lang eller Char.

La oss begynne med å se på den enkleste måten å lage et område på, ved å bruke “..” og i operatører:

(jeg i 1..9)

Også, hvis vi ønsker å definere et tilbakestående område, kan vi bruke ned til operatør:

(jeg i 9 ned til 1) 

Vi kan også bruke dette uttrykket som en del av et hvis uttalelse for å sjekke om en verdi tilhører et område:

hvis (3 i 1..9) skriver ut ("ja")

2.2. Iterating Ranges

Nå, mens vi kan bruke områder med noe sammenlignbart, hvis vi vil itere, så trenger vi et integrert typeområde.

La oss nå se på koden for å gjenta gjennom et område:

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

Den samme brukssaken gjelder tegn:

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

3. Bruke step () Funksjon

Bruken av steg() funksjonen er ganske intuitiv: vi kan bruke den til å definere en avstand mellom verdiene i området:

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

I dette eksemplet gjentar vi fremover og bakover gjennom verdiene fra 1-9, med en trinnverdi på 2.

4. Bruke omvendt () Funksjon

Som navnet antyder, er omvendt () funksjonen vil reversere rekkefølgen på området:

(1..9). Reversert (). ForEach {print (it) // Print 987654321} (1..9) .reversed (). Trinn (3) .for hver {print (it) // Print 963}

5. Bruke før() Funksjon

Når vi ønsker å lage et område som ekskluderer sluttelementet vi kan bruke før():

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

6. Den siste,først,steg Elementer

Hvis vi trenger å finne den første, trinnet eller den siste verdien av området, er det funksjoner som vil returnere dem til oss:

utskrift ((1..9). første) // Skriv ut 1 utskrift ((1..9 trinn 2). trinn) // Skriv ut 2 utskrift ((3..9). reversert (). siste) // Skriv ut 3

7. Filtreringsområder

De filter() funksjonen returnerer en liste over elementer som samsvarer med et gitt predikat:

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

Vi kan også bruke andre funksjoner som kart() og redusere() til vårt sortiment:

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

8. Andre funksjoner

Det er mange andre funksjoner vi kan bruke på vårt utvalg, som min, maks, sum, gjennomsnitt, antall, distinkte:

val r = 1..20 utskrift (r.min ()) // Skriv ut 1 utskrift (r.max ()) // Skriv ut 20 utskrift (r.sum ()) // Skriv ut 210 utskrift (r. gjennomsnitt () ) // Skriv ut 10,5 utskrift (r.tall ()) // Skriv ut 20 val gjentatt = listOf (1, 1, 2, 4, 4, 6, 10) trykk (gjentatt distinkt ()) // Skriv ut [1, 2, 4, 6, 10] 

9. Egendefinerte objekter

Det er også mulig å lage et utvalg over egendefinerte objekter. For det er det eneste kravet å utvide Sammenlignelig grensesnitt.

En enum er et godt eksempel. Alle enums i Kotlin utvides Sammenlignelig som betyr at elementene som standard er sortert i den sekvensen de vises.

La oss lage en rask Farge enum:

enum klasse Farge (val rgb: Int): Sammenlignelig {BLÅ (0x0000FF), GRØNN (0x008000), RØD (0xFF0000), MAGENTA (0xFF00FF), GUL (0xFFFF00); } 

Og bruk den i noen hvis uttalelser:

val range = red..gult if (range.contains (Color.MAGENTA)) println ("true") // Print true if (Color.RED in Color.GREEN..Color.YELLOW) println ("true") / / Skriv ut true hvis (Color.RED! I Color.MAGENTA..Color.YELLOW) println ("true") // Print true

Men siden dette ikke er en integrert type, kan vi ikke gjenta det. Hvis vi prøver, får vi en kompileringsfeil:

morsom hoved (args: Array) {for (c i Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop-området må ha en iterator () -metode}

Og hvis vi ønsker å ha et tilpasset område som vi kan gjenta, trenger vi bare å implementere det ClosedRange i tillegg til Iterator.

10. Konklusjon

I denne artikkelen demonstrerte vi hvordan vi kan bruke rekkeviddeuttrykk i Kotlin og forskjellige funksjoner vi kan bruke.

Som alltid er kildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found