Sådan bruges Kotlin Range Expressions

1. Introduktion

Et interval er en række af værdier, der er defineret af en start, en slutning og et trin.

I denne hurtige vejledning skal vi se på, hvordan vi kan definere og bruge intervaller i Kotlin.

2. Brug af Kotlin Ranges

I Kotlin kan vi oprette intervaller ved hjælp af rækkevidde til () og ned til() funktioner eller .. operatøren.

Vi kan bruge intervaller til enhver sammenlignelig type.

Som standard er de inkluderende, hvilket betyder, at udtrykket 1..4 svarer til værdierne 1,2,3 og 4.

Ud over, der er en anden standard: afstanden mellem to værdier, kaldet et trin, med en implicit værdi på 1.

Så nu, lad os se på et par eksempler på oprettelse af intervaller og brug af andre nyttige metoder til at manipulere dem.

2.1. Oprettelse af intervaller

Serier implementerer en fælles grænseflade - ClosedRange. Resultatet af en ClosedRange er en progression (såsom IntProgression, LongProgression, eller CharProgression).

Denne progression indeholder en start, en inkluderende slutning og et trin, og det er en undertype af Iterabel hvor N er Int, lang eller Char.

Lad os starte med at se på den enkleste måde at oprette et interval på ved hjælp af “..” og i operatører:

(jeg i 1..9)

Også, hvis vi vil definere et bagudgående interval, kan vi bruge ned til operatør:

(jeg i 9 ned til 1) 

Vi kan også bruge dette udtryk som en del af et hvis sætning for at kontrollere, om en værdi hører til et interval:

hvis (3 i 1..9) udskriver ("ja")

2.2. Itererende områder

Nu, mens vi kan bruge intervaller med noget sammenligneligt, hvis vi vil gentage, så har vi brug for et integreret typeinterval.

Lad os nu se på koden for at gentage gennem et interval:

til (i i 1. rækkevidde (9)) {udskriv (i) // Udskriv 123456789} til (jeg i 9. nedTil (1)) {udskriv (i) // Udskriv 987654321}

Den samme anvendelse gælder for tegn:

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

3. Brug af step () Fungere

Brugen af trin() funktion er ret intuitiv: vi kan bruge den til at definere en afstand mellem værdierne i området:

til (i i 1..9 trin 2) {udskriv (i) // Udskriv 13579} til (jeg i 9 ned til 1 trin 2) {udskriv (i) // Udskriv 97531}

I dette eksempel gentager vi frem og tilbage gennem værdierne fra 1-9 med en trinværdi på 2.

4. Brug af omvendt () Fungere

Som navnet antyder, er omvendt () funktion vender rækkefølgen for området:

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

5. Brug af så længe() Fungere

Når vi vil oprette et interval, der udelukker det slutelement, vi kan bruge så længe():

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

6. Den sidst,først,trin Elementer

Hvis vi har brug for at finde den første, trin eller den sidste værdi i området, er der funktioner, der vil returnere dem til os:

udskriv ((1..9). første) // Udskriv 1 udskriv ((1..9 trin 2). trin) // Udskriv 2 udskriv ((3..9). omvendt (). sidste) // Udskriv 3

7. Filtreringsområder

Det filter() funktion returnerer en liste med elementer, der matcher et givet prædikat:

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

Vi kan også anvende andre funktioner som f.eks kort() og reducere() til vores sortiment:

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

8. Andre hjælpefunktioner

Der er mange andre funktioner, vi kan anvende på vores sortiment, som f.eks min, max, sum, gennemsnit, count, distinkt:

val r = 1..20 print (r.min ()) // Print 1 print (r.max ()) // Print 20 print (r.sum ()) // Print 210 print (r. gennemsnit () ) // Print 10,5 print (r.count ()) // Print 20 val gentaget = listOf (1, 1, 2, 4, 4, 6, 10) print (repeat.distinct ()) // Print [1, 2, 4, 6, 10] 

9. Brugerdefinerede objekter

Det er også muligt at oprette et interval over brugerdefinerede objekter. For det er det eneste krav at udvide Sammenlignelig interface.

Et enum er et godt eksempel. Alle enums i Kotlin udvides Sammenlignelig hvilket betyder, at elementerne som standard er sorteret i den rækkefølge, de vises.

Lad os oprette en hurtig Farve enum:

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

Og brug det derefter i nogle hvis udsagn:

val interval = rød..gul hvis (range.contains (Color.MAGENTA)) println ("true") // Print true if (Color.RED in Color.GREEN..Color.YELLOW) println ("true") / / Print sand hvis (Color.RED! I Color.MAGENTA..Color.YELLOW) println ("true") // Print true

Da dette imidlertid ikke er en integreret type, kan vi ikke gentage det. Hvis vi prøver, får vi en kompileringsfejl:

fun main (args: Array) {for (c i Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop-området skal have en iterator () -metode}

Og hvis vi ønsker at have et tilpasset interval, som vi kan gentage, er vi bare nødt til at implementere det ClosedRange såvel som Iterator.

10. Konklusion

I denne artikel demonstrerede vi, hvordan vi kan bruge rækkeviddeudtryk i Kotlin og forskellige funktioner, vi kan anvende.

Som altid er kildekoden tilgængelig på GitHub.