Kotlin este un limbaj de programare modern care se compilează la Java bytecode. Este gratuit și open source, și promite să facă codificarea pentru Android chiar mai distractiv.
În articolul precedent din această serie, ați aflat despre nullabilitate, bucle și condiții în Kotlin. În acest tutorial, vom continua să învățăm limba prin vizionarea interfețelor și colecțiilor API din Kotlin.
O gamă în Kotlin este un tip unic care definește o valoare de început și o valoare finală. Cu alte cuvinte, este un interval între o valoare de început și o valoare finală. Rangurile din Kotlin sunt închise, ceea ce înseamnă că valoarea de pornire și valoarea finală sunt incluse în interval.
Vom analiza acum diferitele modalități de a crea intervale în Kotlin.
...
Operatorval oneToFive = 1 ... 5
În codul de mai sus, am creat o gamă închisă. Această variabilă oneToFive
va include următoarele valori: 1, 2, 3, 4, 5. Putem să o comportam folosind pentru
buclă construită.
pentru (n într-o singură) print (n)
Codul de mai sus poate fi redus la:
pentru (n în 1 ... 5) print (n)
De asemenea, putem crea o serie de caractere:
val aToZ = "a" ... "z"
Variabila Atoz
va avea toate literele din alfabetul englez.
rangeTo ()
Funcţie ...
operatorul poate fi înlocuit cu rangeTo ()
extensie pentru a crea o gamă. De exemplu, putem face și asta 1.rangeTo (5)
și ar avea în continuare aceleași rezultate ca și utilizarea ...
operator, după cum sa discutat mai devreme.
val oneToFive: IntRange = 1.ranjament (5)
downto ()
FuncţieAceasta este o altă funcție extensie care va crea o gamă pornind de la un număr dat până la altul.
val fiveToOne = 5.downTo (1)
Putem modifica intervalul folosind Etapa()
funcţie. Aceasta va modifica delta dintre fiecare element din interval.
val oneToTenStep = 1 ... 10 etapa 2 // 1, 3, 5, 7, 9
Codul de mai sus va conține numere impare între 1 și 10.
în
Operator în
operatorul este folosit pentru a stabili dacă o valoare este prezentă într-un anumit interval.
dacă (5 în 1 ... 10) print ("Da 5 este în intervalul") // imprimă "Da 5 este în intervalul"
În codul de mai sus, am verificat dacă 5 este în intervalul 1 ... 10 folosind în
operator. De asemenea, putem folosi opusul !n
pentru a verifica dacă 5 nu se află în interval.
Colecțiile sunt utilizate pentru a stoca grupuri de obiecte în memorie. Într-o colecție, putem prelua, stoca sau organiza obiectele. Kotlin oferă colecțiile sale API ca o bibliotecă standard construită pe partea de sus a Java Collections Collections API. (Vom discuta interfețele în Kotlin într-un post viitor.)
Trebuie să rețineți că aceste interfețe sunt legate de punerea lor în aplicare la momentul compilării. Nu puteți vedea codul sursă de implementare în Kotlin, deoarece colecțiile sunt de fapt implementate de colecțiile Java standard cum ar fi ArrayList
, Hărți
, HashMap
, seturi
, HashSet
, Listă
si asa mai departe. Pentru a înțelege cu adevărat colecțiile API din Kotlin, va trebui să fii familiarizat cu aceste clase de bază și interfețe în Java.
În această secțiune, vom afla despre Listă
, A stabilit
și Hartă
colecții în Kotlin. (Dacă doriți o reîmprospătare pe mese în Kotlin, vizitați primul tutorial din această serie.)
Colecțiile lui Kotlin ne dau abilitatea de a obține o mulțime cu un mic cod - spre deosebire de Java, care pare să aibă nevoie de mult cod pentru a obține un pic! Kotlin are două variante de colecții: mutabile și imuabile. O colecție mutabilă ne oferă posibilitatea de a modifica o colecție prin adăugarea, eliminarea sau înlocuirea unui element. Colecțiile imuabile nu pot fi modificate și nu au aceste metode de ajutor.
Rețineți că adăugarea, eliminarea sau înlocuirea unui element dintr-o colecție imuabilă este posibilă prin intermediul funcțiilor operatorului (vom ajunge la asta în curând), dar acestea vor ajunge la crearea unei noi colecții.
Iterable
InterfațăThe Kotlin Iterable
interfața este în partea de sus a ierarhiei clasei colecțiilor. Această interfață permite colecțiilor să fie reprezentate ca o secvență de elemente (care pot fi iterate în mod natural).
interfața publică Iterablepublic abstract operator iterator fun (): Iterator
Colectie
InterfațăThe Kotlin Colectie
interfața extinde Iterable
interfață. Colectie
interfața este imuabilă. Cu alte cuvinte, aveți acces numai la citiri pentru colecții. A stabilit
și Listă
interfețe (mai multe despre acestea în curând) în Kotlin extinde această interfață.
Unele dintre funcțiile și proprietățile disponibile în Colectie
sunt:
mărimea
: această proprietate returnează dimensiunea colecției.este gol()
: returnează true dacă colecția este goală sau falsă altfel. conține (element: E)
: returnează adevărat dacă elementul specificat în argument este prezent în colecție.conține Toate (element: Colecție)
: returneaza true daca elementul din colectie a trecut ca argument este prezent in colectie. interfață publică Colecție: Iterable public wave size: int public fun isEmpty (): distracție operator boolean public conține (element: @UnsafeVariance E): iterator distracție booleană (): Iterator distracția publică conține toate (elemente: Colecția<@UnsafeVariance E>): Boolean
MutableIterable
InterfațăAceastă interfață în Kotlin ne dă un iterator specializat de la părinte Iterable
interfață.
interfață publică MutableIterable: Iterable iterator distractiv (): MutableIterator
MutableCollection
Interfață MutableCollection
interfață în Kotlin este o interfață specializată care permite colecțiilor să fie mutabile. Cu alte cuvinte, adăugarea și eliminarea operațiunilor pot fi efectuate pe o colecție dată. Această interfață extinde ambele Colectie
și interfața MutableIterable
interfața deja discutată mai sus. MutableSet
și MutableList
interfețele (vom ajunge la ele în curând) în Kotlin extind această interfață. Funcțiile disponibile în această interfață - în afară de cele disponibile în părinții săi - sunt:
adăugați (element: E)
: adaugă elementul trecut ca argument într-o colecție și returnează true dacă este reușit sau fals dacă colecția nu acceptă duplicate și elementul este deja prezent.eliminați (element: E)
: elimină elementul trecut ca argument din colecție. Returnează adevărat dacă este reușit sau fals dacă nu a fost prezent în colecție.addAll (elemente: Colecția)
: adaugă toate elementele din colecția transmisă ca argumente colecției. Returnează adevărat dacă este reușit sau fals dacă nu a fost adăugat nimic.removeAll (elemente: Colecția)
: elimină toate elementele prezente în colecție, transmise ca argumente. Returnează true dacă este reușit sau fals dacă nu a fost eliminat nimic.retainAll (elemente: Colecția)
: păstrează numai elementele prezente în colecțiile primite ca argumente. Returnează adevărat dacă este reușit sau fals dacă nu a fost reținut nimic. clar()
: elimină toate elementele din această colecție.interfață publică MutableCollection: Colectie , MutableIterable iterator distractiv (): MutableIterator distracție publică adăugată (element: E): Boolean public fun remove (element: E): Boolean public fun addAll (elemente: Colecție ): Distracție publică booleană removeAll (elemente: Colecția ): Boolean public distracție retainAll (elemente: Colecție ): Boolean public fun clear (): Unitate
Acum, ați învățat despre interfețele de vârf din ierarhia clasei de colectare de la Kotlin, să examinăm acum modul în care Kotlin se ocupă de colecții precum Liste, Seturi și Hărți în partea rămasă a tutorialului.
O listă este o colecție ordonată de elemente. Aceasta este o colecție populară utilizată pe scară largă. Să ne uităm la diferite modalități de a crea o listă în Kotlin.
lista de()
FuncţieÎn Kotlin, putem crea o listă imuabilă (numai pentru citire) utilizând lista de()
funcție helper din biblioteca standard Kotlin. Această funcție returnează un Kotlin Listă
tip de interfață.
var numere: Listă= listOf (1, 2, 3, 4, 5) var nume: Listă = listOf ("Chike", "Nnamdi", "Mgbemena") pentru (nume în nume) println (name)
Rularea codului de mai sus se va imprima:
Chike Nnamdi Mgbemena
În plus, putem trece valori de diferite tipuri în lista de()
ca argumente și rezultatul va funcționa în continuare - va fi o listă de tip mixt.
var listMixedTypes = listOf ("Chike", 1, 2.445, 's') // va mai fi compilat
emptyList ()
FuncţieAceastă funcție creează doar o listă imuabilă goală și returnează un Kotlin Listă
tip de interfață.
valul gol: Listă= emptyList ()
listOfNotNull ()
FuncţieAceastă funcție creează o nouă listă imuabilă care conține numai elemente care nu sunt nul. Rețineți că această funcție returnează un Kotlin Listă
tipul de interfață, de asemenea.
val nonNullsList: Listă= listOfNotNull (2, 45, 2, null, 5, null)
Listă
interfață din biblioteca standard Kotlin se extinde numai la Colectie
interfață. Cu alte cuvinte, singurul său părinte este Colectie
interfață. Acesta suprascrie toate funcțiile din interfața părinte pentru a răspunde nevoilor sale speciale și definește și funcțiile proprii, cum ar fi:
obțineți (index: Int)
: un operator de funcții care returnează elementul la indexul specificat. indexOf (element: E)
: returnează indexul primei apariții a elementului trecut ca argument în listă sau -1 dacă nu se găsește nici unul.lastIndexOf (element: E)
: returnează indexul ultimei apariții a elementului trecut ca argument în listă sau -1 dacă nu se găsește nici unul. listIterator ()
: returnează un iterator de listă peste elementele din listă.subList (de laIndex: Int, toIndex: Int)
: returnează o listă care conține partea din listă între indicii de început și de sfârșit specificați. println (names.size) // 3 println (nume.get (0)) // "Chike" println (nume.indexOf ("Mgbemena")) // 2 println (names.contains ("Nnamdi" 'Adevărat'
arrayListOf ()
FuncţieAceasta creează o listă care poate fi schimbată și returnează o Java ArrayList
tip.
val stringList: ArrayList= arrayListOf ("Buna ziua", "Tu", "Acolo")
mutableListOf ()
FuncţiePentru a adăuga, a elimina sau a înlocui valori dintr-o listă, trebuie să transformăm lista într-una singulară. Putem converti o listă imutabilă într-o listă care poate fi mutată prin apelarea funcției toMutableList ()
pe listă. Cu toate acestea, rețineți că această metodă va crea o listă nouă.
var mutableNames1 = names.toMutableList () mutableNames1.add ("Ruth") // mutabil acum și adăugat "Ruth" la lista
Pentru a crea o listă cu un anumit tip de la zero, de ex. Şir
, folosim mutableListOf
, în timp ce pentru tipurile mixte putem folosi doar mutableListOf ()
funcție în loc.
// o listă cu un anumit tip care poate fi schimbată, de ex. String valabil mutableListNames: MutableList= mutableListOf ("Josh", "Kene", "Sanya") mutableListNames.add ("Mary") mutableListNames.removeAt (1) mutableListNames [0] = "Oluchi" listă mixtă de tipuri mixte val mutableListMixed = mutableListOf ("BMW", "Toyota", 1, 6.76, 'v')
Oricare dintre aceste funcții va reveni a MutableList
Tip interfață Kotlin. Această interfață extinde ambele MutableCollection
și Listă
interfețele discutate mai devreme în această secțiune. MutableList
interfața adaugă metode pentru recuperarea sau substituirea unui element în funcție de poziția sa:
set (index: int, element: E)
: înlocuiește un element din listă cu alt element. Aceasta returnează elementul anterior la poziția specificată.adăugați (index: Int, element: E)
: introduce un element la indexul specificat. removeAt (index: Int)
: scapă elementul de la un anumit indice. val mutableListFood: MutableList= mutableListOf ("Orezul Jollof", "Eba & Egusi", "Orezul Fried") mutableListFood.remove mutableListFood.removeAt (0) mutableListFood.set (0, "Fasole") mutableListFood. adăugați (1, "Pâine și ceai") pentru (foodName în mutableListFood) println (foodName)
Făcând codul de mai sus, obținem următorul rezultat:
Fasole Paine si ceai Eba & Egusi
Rețineți că toate aceste funcții creează o Java ArrayList
în spatele scenelor.
Un set este o colecție neordonată de elemente unice. Cu alte cuvinte, nu poate avea duplicate! Să ne uităm la câteva moduri diferite de a crea un set în Kotlin. Fiecare dintre acestea creează o structură de date diferită, fiecare dintre acestea fiind optimizată pentru un anumit tip de sarcină.
set de()
FuncţiePentru a crea un set imuabil (numai pentru citire) în Kotlin, putem folosi funcția set de()
, care returnează un Kotlin A stabilit
tip de interfață.
// creează un set imuabil de tipuri mixte val mixedTypesSet = setOf (2, 4.454, "how", "far", 'c') // va compila var intSet: Set= setOf (1, 3, 4) // sunt permise numai tipurile de numere întregi
Rețineți că Kotlin A stabilit
interfața se extinde numai la Kotlin Colectie
și suprascrie toate proprietățile disponibile în părinte.
hashSetOf ()
Funcţie Utilizarea hashSetOf ()
funcția creează o Java HashSet
colecție care stochează elementele dintr-o tabelă de tip hash. Deoarece această funcție returnează o Java HashSet
tip, putem adăuga, elimina sau șterge elemente din set. Cu alte cuvinte, este mutabil.
Setări: java.util.HashSet= hashSetOf (1, 2, 6, 3) intsHashSet.add (5) intsHashSet.remove (1)
sortedSetOf ()
FuncţieUtilizarea sortedSetOf ()
funcția creează o Java TreeSet
colecția din spatele scenei, care comandă elemente bazate pe ordinea lor naturală sau pe un comparator. Acest set este, de asemenea, mutable.
val intsSortedSet: java.util.TreeSet= sortSetOf (4, 1, 7, 2) intsSortedSet.add (6) intsSortedSet.remove (1) intsSortedSet.clear ()
linkedSetOf ()
FuncţieAceastă funcție returnează o Java LinkedHashSet
tip. Acest set mutabil stochează o listă legată de intrările din set, în ordinea în care au fost inserate.
val intsLinkedHashSet: java.util.LinkedHashSet= linkedSetOf (5, 2, 7, 2, 5) // 5, 2, 7 intsLinkedHashSet.add (4) intsLinkedHashSet.remove (2) intsLinkedHashSet.clear
mutableSetOf ()
FuncţiePutem folosi mutableSetOf ()
pentru a crea un set mutabil. Această funcție returnează un Kotlin MutableSet
tip de interfață. În spatele scenei, această funcție creează pur și simplu o Java LinkedHashSet
.
// creează un set mutable de int tipuri numai val intsMutableSet: MutableSet= mutableSetOf (3, 5, 6, 2, 0) intsMutableSet.add (8) intsMutableSet.remove (3)
MutableSet
interfața extinde ambele MutableCollection
si A stabilit
interfețe.
Hărțile asociază cheile cu valorile. Cheile trebuie să fie unice, dar valorile asociate nu trebuie să fie. În acest fel, fiecare cheie poate fi utilizată pentru a identifica în mod unic valoarea asociată, deoarece harta asigură faptul că nu puteți avea chei duplicat în colecție. În spatele scenei, Kotlin utilizează Java Hartă
pentru a implementa tipul său de colecție de hărți.
harta()
FuncţiePentru a crea o imagine imuabilă sau numai pentru citire Hartă
Colectia din Kotlin, folosim harta()
funcţie. Creăm o hartă cu această funcție oferindu-i o listă de perechi - prima valoare este cheia, iar a doua este valoarea. Apelarea acestei funcții returnează un modul Kotlin Hartă
tip de interfață.
val callingCodesMap: Harta= mapOf (234 pentru "Nigeria", 1 pentru "SUA", 233 pentru "Ghana") pentru ((cheie, valoare) în callingCodesMap) println [234]) // Nigeria
Rularea codului de mai sus va produce rezultatul:
234 este codul de apel pentru Nigeria 1 este codul de apel pentru SUA 233 este codul de asteptare pentru Ghana
Spre deosebire de Listă
și A stabilit
interfețe în Kotlin care extind Colectie
interfață, Hartă
interfața nu se extinde deloc. Unele dintre proprietățile și funcțiile disponibile în această interfață sunt:
mărimea
: această proprietate returnează dimensiunea colecției de hărți.este gol()
: returnează true dacă harta este goală sau falsă altfel.containsKey (cheie: K)
: returnează true dacă harta conține cheia din argument. conține Valoare (valoare: V)
: returnează adevărat dacă harta hărtește una sau mai multe chei la valoarea trecută ca argument.(cheie: K)
: returnează valoarea care corespunde cheii date sau "null" dacă nu se găsește nici una. chei
: această proprietate returnează un imuabil A stabilit
din toate cheile de pe hartă.valorile
: returnează un imuabil Colectie
din toate valorile din hartă.mutableMapOf ()
Funcţie mutableMapOf ()
funcția creează o hartă mutabilă pentru noi, astfel încât să putem adăuga și elimina elemente din hartă. Aceasta returnează un Kotlin MutableMap
tip de interfață.
val valuteMutableMap: MutableMap= mutableMapOf ("Naira" pentru "Nigeria", "Dolari" pentru "SUA", "Pounds" pentru "Marea Britanie") println (Țările sunt $ valuteMutableMap.values ] println ("Monedele sunt $ valuteMutableMap.keys") // Monedele sunt [Naira, Dolari, Pounds] valuteMutableMap.put ("Cedi", "Ghana") valuteMutableMap.remove ("Dollars"
MutableMap
interfața nu extinde MutableCollection
interfață; este doar părinte este Hartă
interfață. El suprapune chei
, intrări
și valorile
proprietăți din interfața părinte pentru a le redefini. Iată câteva dintre funcțiile suplimentare disponibile în MutableMap
interfaţă:
pune (cheie: K, valoare: V)
: introduce cheia, perechea de valori în hartă. Aceasta va reveni la valoarea anterioară legată de cheie sau nulă dacă cheia nu a fost utilizată anterior. eliminați (tasta: K)
: elimină cheia și valoarea legată din hartă. pune tot
(de la: Harta)
: actualizează harta cu toate datele din harta dată. Vor fi adăugate chei noi, iar cheile existente vor fi actualizate cu noi valori. clar()
: elimină toate elementele de pe hartă. Putem obține valoarea pentru o cheie folosind obține()
funcţie. De asemenea, putem folosi o notație de tip bracket pătrat ca o comandă rapidă pentru obține()
.
print (valuteMutableMap.get ("Nigeria")) // va imprima Naira print (valuteMutableMap ["Nigeria"]) // va imprima Naira
hashMapOf ()
FuncţieFolosind această funcție returnează Java HashMap
tip care este mutabil. HashMap
clasa utilizează o tabelă hash pentru a implementa Java Hartă
interfață.
val persoaneHashMap: java.util.HashMap= hashMapOf (1 la "Chike", 2 la "John", 3 la "Emeka")
linkedHashMap ()
FuncţieAceastă funcție returnează o Java LinkedHashMap
tip care este mutabil. LinkedHashMap
clasa extinde Java HashMap
și menține o listă legată de intrările din hartă în ordinea în care au fost inserate.
val postalCodesHashMap: java.util.LinkedHashMap= linkedMapOf ("NG" pentru "Nigeria", "AU" pentru "Australia", "CA" pentru "Canada") postalCodesHashMap.put ("NA", Namibia) postalCodesHashMap.remove ("CA") // Canada
sortedMapOf ()
FuncţieAceastă funcție returnează o Java SortedMap
tip care este mutabil. Java SortedMap
clasa vede că intrările din hartă sunt menținute într-o ordine ascendentă.
val personsSortedMap: java.util.SortedMap= sortMapOf (2 la "Chike", 1 la "John", 3 la "Emeka") persoaneSortedMap.put (7, "Adam") personsSortedMap.remove (3)
Rețineți că implementarea acestor interfețe de colectare în Kotlin se întâmplă la momentul compilării.
Kotlin ne oferă multe funcții utile de operare numite funcții de extensie care pot fi invocate în colecții. Să aruncăm o privire la unele dintre cele mai utile.
ultimul()
FuncţieAceastă funcție de operator returnează ultimul element dintr-o colecție, cum ar fi o listă sau un set. De asemenea, putem furniza un predicat pentru a căuta într-un subset de elemente.
val stringList: Listă= listOf ("in", "the", "club") print (stringList.last ()) // va imprima "club" / va imprima "val intSet: Set = setOf (3, 5, 6, 6, 6, 3) print (intSet.last ()) // va imprima 6
primul()
FuncţieAceastă funcție de operator returnează primul element când este invocat într-o colecție, cum ar fi o listă sau un set. Dacă se dă un predicat, atunci se folosește predicatul pentru a restricționa operația la un subset de elemente.
print (stringList.first ()) // va imprima "in" print (intSet.first ()) // va imprima 3
max ()
FuncţieInvocarea acestei funcții de operator într-o colecție, cum ar fi o listă sau un set, returnează cel mai mare element, sau nulă dacă nu se găsește cel mai mare element.
val intList: Listă= listOf (1, 3, 4) print (intList.max ()) // va imprima 4 imprimare (intSet.max ()) // va imprima 6
cădere brusca()
FuncţieApelarea acestei funcții de operator returnează o nouă listă sau un set care conține toate elementele, cu excepția primelor elemente n.
print (stringList.drop (2)) // va imprima "club"
la care se adauga()
FuncţieAceastă funcție de operator returnează o colecție care conține toate elementele originalului și apoi elementul dat dacă nu este deja în colecție. Aceasta va duce la crearea unei noi liste în locul modificării listei.
print (intList.plus (6)) // va imprima [1, 3, 4, 6]
minus()
FuncţieOpusul versiunii la care se adauga()
este funcția minus()
funcţie. Returnează o colecție care conține toate elementele setului original, cu excepția elementului dat. De asemenea, se termină crearea unei noi liste în locul modificării listei.
print (intList.minus (3)) // va imprima [1, 4]
in medie()
FuncţieApelarea acestei funcții de operator va returna un număr mediu de elemente din colecție.
print (intList.average ()) // va imprima 2.6666666666666665
Cele mai multe dintre aceste funcții de extensie sunt disponibile în biblioteca standard Colecții Kotlin. Vă recomandăm să verificați documentația pentru a afla mai multe despre ceilalți.
În acest tutorial, ați aflat despre interfața API și colecțiile în limba de programare Kotlin. În următorul tutorial din seria Kotlin From Scratch, veți fi introduși în funcții în Kotlin. Ne vedem în curând!
Pentru a afla mai multe despre limba Kotlin, vă recomand să vizitați documentația Kotlin. Sau verificați câteva dintre celelalte postări pentru dezvoltarea aplicațiilor Android aici pe Envato Tuts!