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.