Kotlin è un linguaggio di programmazione moderno che viene compilato in bytecode Java. È gratuito e open source e promette di rendere la codifica per Android ancora più divertente.
Nell'articolo precedente di questa serie, hai imparato a conoscere nulla, loop e condizioni in Kotlin. In questo tutorial, continueremo a imparare la lingua osservando le API di intervalli e raccolte in Kotlin.
Un intervallo in Kotlin è un tipo univoco che definisce un valore iniziale e un valore finale. In altre parole, è un intervallo tra un valore iniziale e un valore finale. Gli intervalli in Kotlin sono chiusi, il che significa che il valore iniziale e il valore finale sono inclusi nell'intervallo.
Vedremo ora i diversi modi di creare intervalli in Kotlin.
...
Operatoreval oneToFive = 1 ... 5
Nel codice sopra, abbiamo creato un intervallo chiuso. Questa variabile oneToFive
includerà i seguenti valori: 1, 2, 3, 4, 5. Possiamo passarci sopra usando il tasto per
costruisci il ciclo.
for (n in oneToFive) print (n)
Il codice sopra può essere abbreviato in:
for (n in 1 ... 5) print (n)
Possiamo anche creare una serie di caratteri:
val aToZ = "a" ... "z"
La variabile dalla A alla Z
avrà tutte le lettere dell'alfabeto inglese.
RangeTo ()
FunzioneIl ...
l'operatore può essere sostituito con il RangeTo ()
funzione di estensione per creare un intervallo. Ad esempio, possiamo anche farlo 1.rangeTo (5)
e avrebbe comunque gli stessi risultati dell'uso di ...
operatore come discusso in precedenza.
val oneToFive: IntRange = 1.rangeTo (5)
giù verso()
FunzioneQuesta è un'altra funzione di estensione che creerà un intervallo a partire da un numero specificato fino a un altro.
val fiveToOne = 5.downTo (1)
Possiamo modificare la gamma usando il passo()
funzione. Questo modificherà il delta tra ogni elemento nell'intervallo.
val oneToTenStep = 1 ... 10 step 2 // 1, 3, 5, 7, 9
Il codice sopra conterrà numeri dispari tra 1 e 10.
nel
OperatoreIl nel
l'operatore viene utilizzato per accertare se un valore è presente in un determinato intervallo.
if (5 in 1 ... 10) stampa ("Sì 5 è nell'intervallo") // stampa "Sì 5 è nell'intervallo"
Nel codice qui sopra, abbiamo verificato se 5 si trova nell'intervallo 1 ... 10 utilizzando il nel
operatore. Possiamo anche fare il contrario usando !n
per verificare se 5 non è nel range.
Le raccolte vengono utilizzate per memorizzare gruppi di oggetti correlati nella memoria. In una raccolta, possiamo recuperare, archiviare o organizzare gli oggetti. Kotlin fornisce le API delle raccolte come una libreria standard basata sull'API delle raccolte Java. (Discuteremo le interfacce in Kotlin in un post futuro.)
Si noti che queste interfacce sono collegate alla loro implementazione in fase di compilazione. Non puoi vedere il codice sorgente dell'implementazione in Kotlin, perché le collezioni sono effettivamente implementate dalle Collezioni Java standard come Lista di array
, Mappe
, HashMap
, Imposta
, HashSet
, Elenco
e così via. Per capire veramente l'API delle collezioni in Kotlin, è necessario avere familiarità con queste classi e interfacce di base in Java.
In questa sezione, impareremo a conoscere il Elenco
, Impostato
e Carta geografica
collezioni in Kotlin. (Se vuoi un aggiornamento sugli array di Kotlin, visita il primo tutorial di questa serie.)
Le collezioni di Kotlin ci danno la possibilità di ottenere molto con un piccolo codice, a differenza di Java, che sembra aver bisogno di molto codice per ottenere un po '! Kotlin ha due varianti di collezioni: mutevoli e immutabili. Una collezione mutevole ci fornisce la possibilità di modificare una collezione aggiungendo, rimuovendo o sostituendo un elemento. Le raccolte immutabili non possono essere modificate e non hanno questi metodi di supporto.
Si noti che l'aggiunta, la rimozione o la sostituzione di un elemento in una collezione immutabile è possibile tramite le funzioni dell'operatore (ci arriveremo a breve), ma questi finiranno per creare una nuova collezione.
iterable
InterfacciaIl Kotlin iterable
l'interfaccia è in cima alla gerarchia delle classi di collezioni. Questa interfaccia consente alle collezioni di essere rappresentate come una sequenza di elementi (che possono essere ripetuti, naturalmente).
interfaccia pubblica Iterablepublic abstract operator fun iterator (): Iterator
Collezione
InterfacciaIl Kotlin Collezione
l'interfaccia estende il iterable
interfaccia. Il Collezione
l'interfaccia è immutabile. In altre parole, hai accesso in sola lettura alle raccolte. Il Impostato
e Elenco
le interfacce (più su queste a breve) in Kotlin estendono questa interfaccia.
Alcune delle funzioni e proprietà disponibili in Collezione
interfaccia sono:
taglia
: questa proprietà restituisce la dimensione della raccolta.è vuoto()
: restituisce true se la raccolta è vuota o falsa altrimenti. contiene (elemento: E)
: restituisce true se l'elemento specificato nell'argomento è presente nella raccolta.containsAll (elemento: Collection)
: restituisce true se l'elemento nella raccolta passato come argomento è presente nella raccolta. Collezione di interfaccia pubblica: Iterable public val size: Int public fun isEmpty (): Il divertimento dell'operatore pubblico booleano contiene (elemento: @UnsafeVariance E): override booleano fun iterator (): Iterator divertimento pubblico contiene Tutti (elementi: Collezione<@UnsafeVariance E>): Boolean
MutableIterable
InterfacciaQuesta interfaccia in Kotlin ci fornisce un iteratore mutabile specializzato dal genitore iterable
interfaccia.
interfaccia pubblica MutableIterable: Iterable override fun iterator (): MutableIterator
MutableCollection
InterfacciaIl MutableCollection
l'interfaccia in Kotlin è un'interfaccia specializzata che consente alle collezioni di essere modificabili. In altre parole, le operazioni di aggiunta e rimozione possono essere eseguite su una determinata raccolta. Questa interfaccia estende sia il Collezione
interfaccia e il MutableIterable
interfaccia già discussa sopra. Il MutableSet
e MutableList
interfacce (ci arriveremo tra poco) in Kotlin estendono questa interfaccia. Le funzioni disponibili in questa interfaccia, a parte quelle disponibili nei suoi genitori, sono:
aggiungi (elemento: E)
: aggiunge l'elemento passato come argomento alla raccolta e restituisce true se ha successo o false se la raccolta non supporta i duplicati e l'elemento è già presente.rimuovere (elemento: E)
: rimuove l'elemento passato come argomento dalla raccolta. Restituisce true se ha successo o false se non era presente nella collezione.addAll (elements: Collection)
: aggiunge tutti gli elementi della raccolta passati come argomenti alla raccolta. Restituisce true se ha successo o false se non è stato aggiunto nulla.removeAll (elements: Collection)
: rimuove tutti gli elementi presenti nella raccolta passati come argomenti. Restituisce true se ha successo o false se nulla è stato rimosso.retainAll (elementi: Collezione)
: conserva solo gli elementi presenti nelle raccolte passate come argomenti. Restituisce true se ha successo o false se non è stato mantenuto nulla. chiaro()
: rimuove tutti gli elementi da questa raccolta.interfaccia pubblica MutableCollection: Collezione , MutableIterable override fun iterator (): MutableIterator public fun add (elemento: E): Boolean public fun remove (elemento: E): Boolean public fun addAll (elements: Collection ): Boolean public fun removeAll (elements: Collection ): Divertimento pubblico booleano retainAll (elementi: Collezione ): Boolean public fun clear (): Unit
Ora hai imparato a conoscere le principali interfacce nella gerarchia delle classi di raccolta in Kotlin, vediamo ora come Kotlin gestisce raccolte come Liste, Set e Mappe nella parte restante del tutorial.
Una lista è una raccolta ordinata di elementi. Questa è una collezione popolare che è ampiamente utilizzata. Diamo un'occhiata a diversi modi di creare un elenco in Kotlin.
lista di()
FunzioneIn Kotlin, possiamo creare una lista (sola lettura) immutabile usando il lista di()
funzione di supporto dalla libreria standard di Kotlin. Questa funzione restituisce un Kotlin Elenco
tipo di interfaccia.
numeri var: elenco= listOf (1, 2, 3, 4, 5) nomi var: List = listOf ("Chike", "Nnamdi", "Mgbemena") per (nome nei nomi) println (nome)
Eseguendo il codice sopra verrà stampato:
Chike Nnamdi Mgbemena
Inoltre, possiamo passare valori di diversi tipi nel lista di()
come argomenti e il risultato funzionerà ancora: sarà una lista di tipi misti.
var listMixedTypes = listOf ("Chike", 1, 2.445, 's') // sarà ancora compilato
emptyList ()
FunzioneQuesta funzione crea solo una lista immutabile vuota e restituisce un Kotlin Elenco
tipo di interfaccia.
val emptyList: List= lista vuota ()
listOfNotNull ()
FunzioneQuesta funzione crea una nuova lista immutabile contenente solo elementi che non sono nulli. Si noti che questa funzione restituisce un Kotlin Elenco
anche il tipo di interfaccia.
val nonNullsList: List= listOfNotNull (2, 45, 2, null, 5, null)
Il Elenco
l'interfaccia dalla libreria standard di Kotlin estende solo il Collezione
interfaccia. In altre parole, il suo unico genitore è il Collezione
interfaccia. Sovrascrive tutte le funzioni nell'interfaccia genitore per soddisfare le sue esigenze speciali e definisce anche le sue funzioni, come ad esempio:
get (indice: Int)
: un operatore di funzione che restituisce l'elemento nell'indice specificato. indexOf (elemento: E)
: restituisce l'indice della prima occorrenza dell'elemento passato come argomento nell'elenco, oppure -1 se non viene trovato nessuno.lastIndexOf (elemento: E)
: restituisce l'indice dell'ultima occorrenza dell'elemento passato come argomento nell'elenco o -1 se non viene trovato nessuno. listIterator ()
: restituisce un elenco iteratore sugli elementi nell'elenco.subList (fromIndex: Int, toIndex: Int)
: restituisce una lista che contiene la parte della lista tra gli indici di inizio e di fine specificati. println (names.size) // 3 println (names.get (0)) // "Chike" println (names.indexOf ("Mgbemena")) // 2 println (names.contains ("Nnamdi")) // 'vero'
arrayListOf ()
FunzioneQuesto crea un elenco mutabile e restituisce un Java Lista di array
genere.
val stringList: ArrayList= arrayListOf ("Ciao")
mutableListOf ()
FunzionePer aggiungere, rimuovere o sostituire i valori in un elenco, è necessario rendere l'elenco mutabile. Possiamo convertire una lista immutabile in una mutabile chiamando la funzione toMutableList ()
sulla lista. Tuttavia, si noti che questo metodo creerà un nuovo elenco.
var mutableNames1 = names.toMutableList () mutableNames1.add ("Ruth") // ora mutabile e aggiunto "Ruth" alla lista
Per creare un elenco mutabile di un certo tipo da zero, ad es. Stringa
, noi usiamo mutableListOf
, mentre per i tipi misti possiamo semplicemente usare il mutableListOf ()
funzione invece.
// un elenco mutabile di un certo tipo, ad es. String val mutableListNames: MutableList= mutableListOf ("Josh", "Kene", "Sanya") mutableListNames.add ("Mary") mutableListNames.removeAt (1) mutableListNames [0] = "Oluchi" // sostituisce l'elemento nell'indice 0 con "Oluchi" // a elenco mutabile di tipi misti val mutableListMixed = mutableListOf ("BMW", "Toyota", 1, 6.76, "v")
Qualsiasi di queste funzioni restituirà a MutableList
Tipo di interfaccia Kotlin Questa interfaccia estende sia il MutableCollection
e Elenco
interfacce discusse in precedenza in questa sezione. Il MutableList
l'interfaccia aggiunge metodi per il recupero o la sostituzione di un articolo in base alla sua posizione:
set (indice: Int, elemento: E)
: sostituisce un elemento nella lista con un altro elemento. Ciò restituisce l'elemento precedentemente nella posizione specificata.aggiungi (indice: Int, elemento: E)
: inserisce un elemento nell'indice specificato. removeAt (index: Int)
: elimina l'elemento in un particolare indice. val mutableListFood: MutableList= mutableListOf ("Riso e spezzatino", "Riso Jollof", "Eba & Egusi", "Riso fritto") mutableListFood.remove ("Riso fritto") mutableListFood.removeAt (0) mutableListFood.set (0, "Beans") mutableListFood. aggiungi (1, "Pane e tè") per (foodName in mutableListFood) println (foodName)
Eseguendo il codice sopra, produciamo il seguente risultato:
Fagioli Pane e tè Eba & Egusi
Nota che tutte queste funzioni creano un Java Lista di array
dietro le quinte.
Un set è una collezione non ordinata di elementi unici. In altre parole, non può avere duplicati! Diamo un'occhiata ad alcuni dei diversi modi di creare un set in Kotlin. Ognuno di questi crea una diversa struttura di dati, ognuno dei quali è ottimizzato per un certo tipo di attività.
setof ()
FunzionePer creare un set immutabile (di sola lettura) in Kotlin, possiamo usare la funzione setof ()
, che restituisce un Kotlin Impostato
tipo di interfaccia.
// crea un set immutabile di tipi misti val mixedTypesSet = setOf (2, 4.454, "how", "far", "c") // compila var intSet: Set= setOf (1, 3, 4) // solo i tipi di numeri consentiti
Si noti che il Kotlin Impostato
l'interfaccia estende solo il Kotlin Collezione
interfaccia e sovrascrive tutte le proprietà disponibili nel suo genitore.
hashSetOf ()
Funzione Usando il hashSetOf ()
la funzione crea un Java HashSet
collezione che memorizza gli elementi in una tabella hash. Perché questa funzione restituisce un Java HashSet
digita, possiamo aggiungere, rimuovere o cancellare elementi nel set. In altre parole, è mutabile.
val intsHashSet: java.util.HashSet= hashSetOf (1, 2, 6, 3) intsHashSet.add (5) intsHashSet.remove (1)
sortedSetOf ()
FunzioneUsando il sortedSetOf ()
la funzione crea un Java TreeSet
collezione dietro le quinte, che ordina elementi in base al loro ordinamento naturale o da un comparatore. Questo set è anche mutabile.
val intsSortedSet: java.util.TreeSet= sortedSetOf (4, 1, 7, 2) intsSortedSet.add (6) intsSorted.Set.remove (1) intsSortedSet.clear ()
linkedSetOf ()
FunzioneQuesta funzione restituisce un Java LinkedHashSet
genere. Questo set mutabile mantiene un elenco collegato delle voci nel set, nell'ordine in cui sono state inserite.
val intsLinkedHashSet: java.util.LinkedHashSet= linkedSetOf (5, 2, 7, 2, 5) // 5, 2, 7 intsLinkedHashSet.add (4) intsLinkedHashSet.remove (2) intsLinkedHashSet.clear ()
mutableSetOf ()
FunzionePossiamo usare mutableSetOf ()
per creare un set mutabile. Questa funzione restituisce un Kotlin MutableSet
tipo di interfaccia. Dietro le quinte, questa funzione crea semplicemente un Java LinkedHashSet
.
// crea un insieme mutabile di tipi int solo val intsMutableSet: MutableSet= mutableSetOf (3, 5, 6, 2, 0) intsMutableSet.add (8) intsMutableSet.remove (3)
Il MutableSet
interfaccia estende sia il MutableCollection
e il Impostato
interfacce.
Le mappe associano le chiavi ai valori. Le chiavi devono essere univoche, ma non è necessario che i valori associati siano. In questo modo, ciascuna chiave può essere utilizzata per identificare in modo univoco il valore associato, poiché la mappa si assicura che non sia possibile avere chiavi duplicate nella raccolta. Dietro le quinte, Kotlin usa Java Carta geografica
collezione per implementare il suo tipo di raccolta di mappe.
mapof ()
FunzionePer creare un valore immutabile o di sola lettura Carta geografica
collezione in Kotlin, usiamo il mapof ()
funzione. Creiamo una mappa con questa funzione dandole una lista di coppie: il primo valore è la chiave, e il secondo è il valore. Chiamando questa funzione si restituisce un Kotlin Carta geografica
tipo di interfaccia.
val callingCodesMap: Map= mapOf (da 234 a "Nigeria", da 1 a "USA", da 233 a "Ghana") per ((chiave, valore) in callingCodesMap) println ("$ key è il codice chiamante per $ valore") print (callingCodesMap [234]) // Nigeria
L'esecuzione del codice sopra produrrà il risultato:
234 è il codice di chiamata per Nigeria 1 è il codice di chiamata per USA 233 è il codice chiamante per il Ghana
Non mi piace il Elenco
e Impostato
interfacce in Kotlin che estendono il Collezione
interfaccia, la Carta geografica
l'interfaccia non si estende affatto. Alcune delle proprietà e delle funzioni disponibili in questa interfaccia sono:
taglia
: questa proprietà restituisce la dimensione della raccolta di mappe.è vuoto()
: restituisce true se la mappa è vuota o falsa altrimenti.containsKey (chiave: K)
: restituisce true se la mappa contiene la chiave nell'argomento. containsValue (valore: V)
: restituisce true se la mappa mappa una o più chiavi del valore passato come argomento.ottenere (chiave: K)
: restituisce il valore corrispondente alla chiave data o 'null' se non viene trovato alcun valore. chiavi
: questa proprietà restituisce un immutabile Impostato
di tutte le chiavi sulla mappa.valori
: restituisce un immutabile Collezione
di tutti i valori nella mappa.mutableMapOf ()
FunzioneIl mutableMapOf ()
la funzione crea una mappa mutevole per noi in modo che possiamo aggiungere e rimuovere elementi nella mappa. Questo restituisce un Kotlin MutableMap
tipo di interfaccia.
val valuteMutableMap: MutableMap= mutableMapOf ("Naira" in "Nigeria", "Dollari" in "USA", "Pounds" in "UK") println ("I paesi sono $ valuteMutableMap.values") // I Paesi sono [Nigeria, USA, Regno Unito ] println ("Le valute sono $ valuteMutableMap.keys") // Le valute sono le valute [Naira, Dollari, Pounds ]MutableMap.put ("Cedi", "Ghana") valuteMutableMap.remove ("Dollari")
Il MutableMap
l'interfaccia non estende il MutableCollection
interfaccia; è solo genitore è il Carta geografica
interfaccia. Sostituisce il chiavi
, inserimenti
e valori
proprietà dall'interfaccia genitore per ridefinirle. Ecco alcune delle funzioni extra disponibili in MutableMap
interfaccia:
put (chiave: K, valore: V)
: inserisce la chiave, coppia di valori nella mappa. Ciò restituirà il valore precedente collegato alla chiave o null se la chiave non è stata precedentemente utilizzata. rimuovi (chiave: K)
: rimuove la chiave e il relativo valore collegato dalla mappa. metti tutto
(da: mappa)
: aggiorna la mappa con tutti i dati della mappa specificata. Verranno aggiunte nuove chiavi e le chiavi esistenti verranno aggiornate con nuovi valori. chiaro()
: rimuove tutti gli elementi dalla mappa. Possiamo ottenere il valore per una chiave usando il ottenere()
funzione. Possiamo anche usare la notazione della parentesi quadra come scorciatoia per ottenere()
.
print (currenciesMutableMap.get ("Nigeria")) // stampa print Naira (currenciesMutableMap ["Nigeria"]) // stampa Naira
hashMapOf ()
FunzioneL'uso di questa funzione restituisce un Java HashMap
digita che è mutabile. Il HashMap
class usa una tabella hash per implementare Java Carta geografica
interfaccia.
val personsHashMap: java.util.HashMap= hashMapOf (da 1 a "Chike", da 2 a "John", da 3 a "Emeka") personHashMap.put (4, "Chuka") personHashMap.remove (2) print (personsHashMap [1]) // stamperà Chike
LinkedHashMap ()
FunzioneQuesta funzione restituisce un Java LinkedHashMap
digita che è mutabile. Il LinkedHashMap
la classe estende Java HashMap
e mantiene un elenco collegato delle voci nella mappa nell'ordine in cui sono state inserite.
val postalCodesHashMap: java.util.LinkedHashMap= linkedMapOf ("NG" in "Nigeria", "AU" in "Australia", "CA" in "Canada") postalCodesHashMap.put ("NA", "Namibia") postalCodesHashMap.remove ("AU") postalCodesHashMap.get ("CA") // Canada
sortedMapOf ()
FunzioneQuesta funzione restituisce un Java SortedMap
tipo che è mutabile. Il Java SortedMap
class vede che le voci nella mappa sono mantenute in ordine crescente.
val personsSortedMap: java.util.SortedMap= sortedMapOf (da 2 a "Chike", da 1 a "John", da 3 a "Emeka") personSortedMap.put (7, "Adam") personsSortedMap.remove (3)
Ricorda, l'implementazione di queste interfacce di raccolta in Kotlin avviene in fase di compilazione.
Kotlin ci fornisce molte utili funzioni dell'operatore chiamate funzioni di estensione che possono essere richiamate in collezioni. Diamo un'occhiata ad alcuni dei più utili.
scorso()
FunzioneQuesta funzione operatore restituisce l'ultimo elemento in una raccolta come un elenco o un set. Possiamo anche fornire un predicato per cercare all'interno di un sottoinsieme di elementi.
val stringList: List= listOf ("in", "the", "club") print (stringList.last ()) // stamperà "club" // dato un print di predicato (stringList.last it.length == 3) / / stamperà "il" val intSet: Set = setOf (3, 5, 6, 6, 3) stampa (intSet.last ()) // stampa 6
primo()
FunzioneQuesta funzione operatore restituisce il primo elemento quando viene invocato su una raccolta come un elenco o un set. Se viene fornito un predicato, utilizza il predicato per limitare l'operazione a un sottoinsieme di elementi.
print (stringList.first ()) // stampa "in" print (intSet.first ()) // stampa 3
max ()
FunzioneIl richiamo di questa funzione dell'operatore su una raccolta come un elenco o un set restituisce l'elemento più grande, oppure null se non viene trovato alcun elemento più grande.
val intList: List= listOf (1, 3, 4) print (intList.max ()) // stampa 4 print (intSet.max ()) // stampa 6
far cadere()
FunzioneLa chiamata a questa funzione operatore restituisce un nuovo elenco o un insieme contenente tutti gli elementi tranne i primi n elementi.
print (stringList.drop (2)) // stamperà "club"
più()
FunzioneQuesta funzione operatore restituisce una raccolta contenente tutti gli elementi dell'originale e quindi l'elemento dato se non è già presente nella raccolta. Questo finirà per creare una nuova lista invece di modificare la lista.
print (intList.plus (6)) // stampa [1, 3, 4, 6]
meno()
FunzioneL'opposto di più()
la funzione è il meno()
funzione. Restituisce una raccolta contenente tutti gli elementi del set originale tranne l'elemento specificato. Questo finisce anche per creare una nuova lista invece di alterare la lista.
print (intList.minus (3)) // stampa [1, 4]
media()
FunzioneLa chiamata a questa funzione operatore restituirà un numero medio di elementi nella raccolta.
print (intList.average ()) // stamperà 2.6666666666666665
La maggior parte di queste funzioni di estensione sono disponibili nella libreria standard delle raccolte Kotlin. Si consiglia di consultare la documentazione per conoscere gli altri.
In questo tutorial, hai imparato a conoscere le API della serie e delle raccolte nel linguaggio di programmazione Kotlin. Nel prossimo tutorial della serie Kotlin From Scratch, ti verranno presentate le funzioni di Kotlin. A presto!
Per saperne di più sulla lingua di Kotlin, ti consiglio di visitare la documentazione di Kotlin. Oppure guarda alcuni dei nostri altri post di sviluppo di app per Android qui su Envato Tuts!