Kotlin de la zero zone și colecții

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.

1. Ranguri

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.

...  Operator

val 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ţie

Aceasta 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.

2. Colecții

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 ArrayListHărțiHashMapseturiHashSetListă 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ă Iterable public 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.

liste

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.

Utilizarea 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 

Utilizarea emptyList () Funcţie

Această funcție creează doar o listă imuabilă goală și returnează un Kotlin Listă tip de interfață.

valul gol: Listă = emptyList() 

Utilizarea listOfNotNull () Funcţie

Această 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'

Utilizarea arrayListOf () Funcţie

Aceasta creează o listă care poate fi schimbată și returnează o Java ArrayList tip.

val stringList: ArrayList = arrayListOf("Buna ziua", "Tu", "Acolo") 

Utilizarea mutableListOf () Funcţie

Pentru 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.

seturi

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ă. 

Utilizarea set de() Funcţie

Pentru 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.

Utilizarea 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) 

Utilizarea sortedSetOf () Funcţie

Utilizarea 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 ()

Utilizarea linkedSetOf () Funcţie

Această 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

Utilizarea mutableSetOf () Funcţie

Putem 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ți

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.

Utilizarea harta() Funcţie

Pentru 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ă.

Utilizarea 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 cheiintră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

Utilizarea hashMapOf () Funcţie

Folosind 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")

Utilizarea linkedHashMap () Funcţie

Această 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

Utilizarea sortedMapOf () Funcţie

Această 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.

Funcțiile funcțiilor de colectare

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ţie

Această 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ţie

Această 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ţie

Invocarea 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ţie

Apelarea 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ţie

Această 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ţie

Opusul 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ţie

Apelarea 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.

Concluzie

Î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!

Cod