A Kotlin Range Expressions használata

1. Bemutatkozás

A tartomány a kezdet, a vég és a lépés által meghatározott értékek sorozata.

Ebben a gyors bemutatóban megnézzük, hogyan határozhatjuk meg és használhatjuk a tartományokat Kotlinban.

2. A Kotlin Ranges használata

Kotlinban tartományokat hozhatunk létre a rangeTo () és le() funkciók vagy a .. operátor.

Bármely összehasonlítható típushoz használhatunk tartományokat.

Alapértelmezés szerint ezek befogadók, ami azt jelenti, hogy az 1..4 kifejezés megfelel az 1,2,3 és 4 értékeknek.

Továbbá, van egy másik alapértelmezés: a távolság két érték között, úgynevezett lépésben, implicit értéke 1.

Tehát most nézzünk meg néhány példát a tartományok létrehozására és más hasznos módszerek kezelésére.

2.1. Tartományok létrehozása

A tartományok közös interfészt valósítanak meg - ClosedRange. Az eredmény a ClosedRange egy progresszió (mint például IntProgression, LongProgression, vagy CharProgression).

Ez a haladás tartalmaz egy kezdetet, egy befogadó véget és egy lépést, és ez az egyik altípusa Iterálható ahol N van Int, Hosszú vagy Char.

Kezdjük azzal, hogy megvizsgáljuk a tartomány létrehozásának legegyszerűbb módját a „..” és a gombbal ban ben üzemeltetők:

(én 1..9-ben)

Továbbá, ha visszafelé ható tartományt akarunk definiálni, használhatjuk a le operátor:

(én 9-ben lefelé 1-ig) 

Használhatjuk ezt a kifejezést az. Részeként is ha utasítás annak ellenőrzésére, hogy egy érték tartozik-e egy tartományba:

ha (3 in 1..9) nyomtatás ("igen")

2.2. Iteráló tartományok

Míg bármit használhatunk összehasonlítható tartományokkal, ha iterálni akarunk, akkor integrált típusú tartományra van szükségünk.

Most vessünk egy pillantást a kódra, hogy iterálhassunk egy tartományon:

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

Ugyanez a használati eset vonatkozik a karakterekre:

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

3. A s használatávaltep () Funkció

A lépés() a funkció meglehetősen intuitív: használhatjuk a távolság meghatározására a tartomány értékei között:

for (i in 1..9 2. lépés) {print (i) // 13579 nyomtatás} for (i in 9 downTo 1 lépéshez) {print (i) // 97531 nyomtatás}

Ebben a példában előre és hátra iterálunk az 1-9 közötti értékeken keresztül, 2 lépésértékkel.

4. A fordított () Funkció

Ahogy a neve is mutatja, a fordított () függvény megfordítja a tartomány sorrendjét:

(1..9) .reversed (). ForEach {print (it) // Print 987654321} (1..9) .reversed (). (3) lépés. ForEach {print (it) // Print 963}

5. A amíg() Funkció

Amikor olyan tartományt szeretnénk létrehozni, amely kizárja a felhasználható végelemet amíg():

for (i in 1-től 9-ig) {print (i) // 12345678 nyomtatás}

6. A utolsó,első,lépés Elemek

Ha meg kell találnunk a tartomány első, lépcsős vagy utolsó értékét, vannak olyan funkciók, amelyek visszaadják nekünk:

print ((1..9). first) // 1 print nyomtatása ((1..9 step 2) .step) // Print 2 print ((3..9) .reversed (). last) // Print 3

7. Szűrési tartományok

A szűrő() A függvény egy adott predikátumnak megfelelő elemek listáját adja vissza:

val r = 1..10 val f = r.szűrő {it -> it% 2 == 0} // Nyomtatás [2, 4, 6, 8, 10]

Alkalmazhatunk más funkciókat is, mint pl térkép() és csökkenteni () választékunkba:

val m = r.map {it -> it * it} // Nyomtatás [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] val rdc = r.reduce {a, b -> a + b} // 55. nyomtatás 

8. Egyéb segédfunkciók

Sok más funkció is alkalmazható a kínálatunkban, például min, max, összeg, átlag, számlálás, külön:

val r = 1..20 print (r.min ()) // 1 print nyomtatása (r.max ()) // 20 print nyomtatása (r.sum ()) // 210 print nyomtatása (r.avigation () ) // 10.5 nyomtatás (r.count ()) // 20 val ismételt nyomtatás = listOf (1, 1, 2, 4, 4, 6, 10) nyomtatás (ismétlődő. Különbség ()) // nyomtatás [1, 2, 4, 6, 10] 

9. Egyedi objektumok

Az egyéni objektumok felett is lehet tartományt létrehozni. Ehhez az egyetlen követelmény a Hasonló felület.

Az enum jó példa. Az összes kotlin-i lista kiterjed Hasonló ami azt jelenti, hogy alapértelmezés szerint az elemek a megjelenésük sorrendjében vannak rendezve.

Hozzunk létre egy gyors Szín enum:

enum osztály Szín (val rgb: Int): Összehasonlítható {KÉK (0x0000FF), ZÖLD (0x008000), PIROS (0xFF0000), MAGENTA (0xFF00FF), SÁRGA (0xFFFF00); } 

És akkor használja néhány ha nyilatkozatok:

val tartomány = piros..sárga, ha (tartomány.tartalmaz (Színes.MAGENTA)) println ("true") // Igaz igaz nyomtatás, ha (Color.RED in Color.GREEN..Color.YELLOW) println ("true") / / Igaz nyomtatás, ha (Szín.RED! Színesben.MAGENTA..Szín.SÁRGA) println ("true") // Igaz nyomtatás

Mivel azonban ez nem szerves típus, nem tudunk iterálni rajta. Ha megpróbáljuk, fordítási hibát kapunk:

fun main (args: Array) {for (c in Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop tartománynak tartalmaznia kell egy iterator () metódust}

És ha mégis szeretnénk egy olyan egyedi tartományt, amelyen iterálni tudunk, akkor csak végre kell hajtanunk ClosedRange továbbá Iterátor.

10. Következtetés

Ebben a cikkben bemutattuk, hogyan használhatjuk a tartománykifejezéseket Kotlinban és milyen különböző funkciókat alkalmazhatunk.

Mint mindig, a forráskód elérhető a GitHubon.


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