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, hai imparato a conoscere variabili, tipi semplici, matrici, commenti e inferenza di tipo in Kotlin. In questo tutorial, continueremo a imparare la lingua guardando a valori nulla, loop e condizioni in Kotlin.
Se sei un programmatore Android, devi aver incontrato il famigerato NullPointerException
errori nella tua app. Questi accadono ogni volta che provi a chiamare un metodo o leggere una proprietà di un riferimento a un oggetto che è nullo
.
La buona notizia è che Kotlin può aiutarci a evitare questo tipo di errore perché è un linguaggio sicuro. Ciò significa che le variabili non possono avere il valore null a meno che tu dichiari esplicitamente il loro tipo come annullabile. In altre parole, per impostazione predefinita, i tipi non possono essere nulli. Vediamo come questa caratteristica di Kotlin può aiutarci a evitare errori nel nostro codice.
nome val: String = null // non verrà compilato
Come puoi vedere sopra, se assegniamo nullo
al nome
variabile, il compilatore si lamenterà. Affinché il compilatore consenta l'assegnazione, dichiara il nome come annullabile aggiungendo ?
dopo il tipo.
nome di val: String? = null // compilerà name = "Chike" // nuovo valore è "Chike"
Si noti che se ?
viene inserito dopo qualsiasi nome di tipo, abbiamo esplicitamente istruito il compilatore che il valore del tipo può o memorizzare un riferimento oggetto o può essere nullo
-è nullable. Qui, lo abbiamo fatto con il Stringa
digita, ma funziona allo stesso modo Int?
, Byte?
, Lungo?
, La mia classe?
, e così via.
?.
Impariamo di più su come funziona la sicurezza null in Kotlin con un operatore chiamato operatore di chiamata sicura ?.
.
nome var: stringa? = null print (name.length) // non verrà compilato
Il codice sopra non verrà compilato perché Kotlin è un linguaggio nullo. La variabile nome
è assegnato il valore nullo
. Ora, invocando la proprietà lunghezza
su quella variabile si innescherebbe a NullPointerException
errore in Java. Ma il compilatore Kotlin non permetterà il richiamo di questa proprietà perché la variabile potrebbe essere nullo
. Il compilatore non ci permetterà di fare qualcosa che potrebbe generare a NullPointerException
!
val v: String? = null print (v? .length) // compilerà e stamperà "null"
Ora, aggiungendo l'operatore di chiamata sicura ?.
alla variabile prima di invocare la proprietà, abbiamo esplicitamente indicato al compilatore di invocare la proprietà solo se il valore non è nullo
. Se il valore è nullo
, il compilatore userà la stringa "nullo"
come valore per noi. Funziona anche per metodi e non solo proprietà.
Quando si chiama un metodo di un valore nullo, anche il tipo restituito sarà annullabile. Quindi, ad esempio, il tipo di ritorno di v? .length
espressione quando v
sarà annullabile Int?
.
val v: String? = null val len: Int? = v? .length print (len) // compilerà e stamperà "null"
Per bypassare il controllo di nullability con il compilatore Kotlin, possiamo sostituire il ?.
operatore con !!.
. Questo non è raccomandato, tuttavia, a causa dell'elevata probabilità di ottenere NullPointerException
errori se usati.
val v: String? = null val len: Int? = v !!. length print (len) // attiva un errore NullPointerException
?:
Questo operatore ?:
è chiamato l'operatore Elvis (perché la sua forma assomiglia alla testa di Elvis). È usato per fornire un valore alternativo per la variabile, se lo è nullo
.
val nomeutente = null nome: String = nome utente?: "Nessun nome" print (nome) // verrà compilato e stampato "Nessun nome"
Qui, il compilatore ha assegnato la stringa "Senza nome"
alla variabile nome
, perché il nome utente del primo valore è nullo
. Se il primo valore non lo era nullo
, allora quel valore verrebbe assegnato alla variabile.
Kotlin ha while, do-while e for loops.
mentre
Ciclo continuoUna dichiarazione di ripetizione ci consente di specificare che il codice dovrebbe ripetere un'azione mentre alcune condizioni rimangono vere.
Quindi in Kotlin, usando il mentre
il ciclo è lo stesso di altri linguaggi come Java.
while (condition) // execute code here while (fuel> 5) driveMeAroundLagos ()
Finché la condizione è vera, verrà eseguito il codice all'interno delle parentesi graffe o del corpo del ciclo. Se la condizione è falsa, il codice non verrà eseguito. Nel nostro esempio precedente, una volta che la variabile di carburante diventa inferiore a 5 litri, la condizione diventa falsa e quindi il ciclo termina. In altre parole, driveMeAroundLagos ()
l'esecuzione del metodo si ferma.
fare mentre
Ciclo continuoKotlin ha anche il fare mentre
costruisci il ciclo.
do // execute code here while (condition)
Questo è simile al mentre
dichiarazione. Nel ciclo while, il programma verifica la condizione di loop all'inizio del ciclo prima di eseguire il corpo del loop. Se la condizione è falsa, il corpo non viene eseguito. Ma il fare mentre
loop verifica la condizione dopo l'esecuzione del corpo del loop. Ciò significa che il corpo viene eseguito almeno una volta.
per
Ciclo continuoUN per
loop è un'istruzione di ripetizione che ci permette di scorrere gli oggetti mentre una determinata condizione è vera.
for (value in range) // Esegui codice
In Kotlin, il per
il costrutto loop funziona con iterazione su intervalli, collezioni o altri iterabili (spiegherò di più su questi nel prossimo post). Per i loop, lavorare insieme a nel
operatore, che viene utilizzato per accertare se un valore è presente in un determinato intervallo.
for (a in 1 ... 5) print ("$ a") // stampa 1 2 3 4 5
Nel codice sopra, stiamo iterando attraverso un intervallo chiuso da 1 a 5 e stampando ogni valore nell'intervallo.
Possiamo usare il withIndex ()
funzione o il indici
proprietà su un array per iterare su un array in cui abbiamo bisogno dell'indice per ciascun elemento.
withIndex ()
FunzionePossiamo scorrere su un array per accedere all'indice di ciascun elemento chiamando il withIndex ()
funzione sulla matrice, perché il withIndex ()
la funzione restituisce un iterable di IndexedValue
scrivi per ogni elemento. Questo ci consente di accedere sia all'indice sia al valore di ogni elemento.
val numbersArray = intArrayOf (1,2,3,4,5) per ((indice, valore) in numbersArray.withIndex ()) print ("$ valore indice indice è $ valore \ n")
Il codice qui sopra stamperà il risultato qui sotto:
0 valore indice è 1 1 valore indice è 2 2 valore indice è 3 3 valore indice è 4 4 valore indice è 5
indici
ProprietàInoltre, possiamo usare il indici
proprietà sull'array. Ciò restituirà solo l'intervallo di indici validi per l'array.
val numbers1 = intArrayOf (1,2,3,4,5) per (indice in numeri1.indices) print ("$ valore indice indice è $ numeri1 [indice] \ n")
Il codice precedente produrrà lo stesso risultato dell'esempio precedente. Potete vedere anche qui che possiamo usare l'indice per accedere a un elemento dell'array, in modo simile ad altri linguaggi di programmazione come Java.
Kotlin ha tre tipi di dichiarazioni condizionali: il Se
, se altro
, e quando
dichiarazioni.
Se
dichiarazioneUn Se
l'istruzione esegue un codice se una condizione è vera o la salta semplicemente se la condizione è falsa. Niente di speciale qui: Se
le dichiarazioni funzionano in modo simile a come fanno nella maggior parte degli altri linguaggi di programmazione, incluso Java.
val number = 20 if (number% 2 == 0) print ("$ number is divisible by 2") // 20 è divisibile per 2
Possiamo anche controllare se una variabile è di un tipo particolare usando il è
parola chiave.
if (number is Int) print ("$ number is ante")
se altro
dichiarazioneIl se altro
esegue un'azione se la condizione è vera ed esegue un'azione diversa se la condizione è falsa.
val number = 13 if (number% 2 == 0) print ("$ numero è divisibile per 2") else print ("$ numero non è divisibile per 2") // 13 non è divisibile per 2
Una delle principali funzionalità che distingue il se altro
la dichiarazione in Kotlin da altri linguaggi di programmazione come Java è la capacità di assegnare una variabile dal valore restituito del se altro
dichiarazione. Questo è possibile perché a se altro
la dichiarazione può essere usata non solo come una dichiarazione, ma anche come espressione in Kotlin.
val number = 13 val result = if (number% 2 == 0) "$ number is divisible by 2" else "$ number non è divisibile per 2" print (risultato) // 13 non è divisibile per 2
Nel codice sopra, abbiamo assegnato il risultato
variabile con a Stringa
oggetto basato sulla condizione del se altro
dichiarazione. Si tenga presente che ciò restituirà solo l'ultima istruzione in un particolare blocco di condizioni e anche che non è possibile utilizzare un Se
senza un altro
come espressione.
val result = if (number% 2 == 0) "Divisible by 2" "Number is $ number" // solo questa stringa viene restituita se eseguita else "Non divisibile per 2" "Number is $ number"
quando
EspressioneKotlin ha introdotto il quando
costruire in sostituzione del familiare interruttore
dichiarazione che abbiamo in diversi linguaggi di programmazione come C ++, Java e così via. quando
è più conciso e ha caratteristiche più potenti del interruttore
affermazione con cui potresti avere familiarità.
Il quando
la dichiarazione esegue diverse azioni in base ai possibili valori di una costante di tipo Int
, Stringa
, Byte
, Corto
, o qualsiasi altro oggetto.
divertente guessTheNumber (numero: Int) quando (numero) 1 -> println ("numero è 1") 2 -> println ("numero è 2") 3 -> println ("numero è 3") altro -> println ("numero non è né 1, 2 o 3")
Nel codice sopra, abbiamo passato la funzione guessTheNumber ()
un parametro numerico (discuteremo delle funzioni in Kotlin in un post successivo). Il quando
espressione quindi controlla se uno qualsiasi dei rami corrisponde al valore di numero
e poi esegue l'azione su quel ramo. Se nessuno dei rami era una partita, il altro
il ramo è eseguito.
Un'altra variante del quando
espressione non richiede alcun argomento, come nell'esempio sotto.
divertente guessTheNumber (numero: Int) quando number == 1 -> println ("numero è 1") numero == 2 -> println ("numero è 2") numero == 3 -> println ("numero è 3 ") else -> println (" numero non è né 1, 2 o 3 ")
Se vogliamo eseguire più di un'azione su un ramo, dobbiamo avvolgere le azioni in parentesi graffe .
valore val = 2 quando (numero) 1 -> println ("numero è 1") 2 -> // blocco di codice eseguito println ("numero è 2") println ("è un numero pari") 3 -> println ("numero è 3")
Inoltre, possiamo combinare i valori di test in un singolo ramo.
val number = 2 when (number) 1, 2 -> println ("numero è 1 o 2") // numero è 1 o 2 3 -> println ("numero è 3")
Qui, il primo ramo viene eseguito perché stiamo testando per un valore di 1 o 2.
In questo tutorial, hai imparato a conoscere nulla, loop e condizioni nel linguaggio di programmazione Kotlin. Nel prossimo tutorial della serie Kotlin From Scratch, imparerai a conoscere le gamme e le raccolte API in 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 tutorial di Kotlin qui su Envato Tuts+!