Questo codelab fa parte del Kotlin Bootcamp for Programs. Otterrai il massimo valore da questo corso se lavori in sequenza nei codelab. A seconda delle tue conoscenze, potresti essere in grado di scorrere alcune sezioni. Questo corso è rivolto ai programmatori che conoscono una lingua orientata agli oggetti e vogliono imparare il kotlin.
Introduzione
In questo codelab, scoprirai le nozioni di base del linguaggio di programmazione Kotlin: tipi di dati, operatori, variabili, strutture di controllo e variabili nulli e non nulli. Questo corso è rivolto ai programmatori che conoscono una lingua incentrata sugli oggetti e che vogliono imparare il Kotlin.
Anziché creare un'unica app di esempio, le lezioni di questo corso sono state concepite per sviluppare le tue conoscenze, ma sono semi-indipendenti gli uni dagli altri per esplorare le sezioni che conosci. Per collegare tutti questi esempi, molti sono basati su un acquario. E se vuoi vedere l'intera storia dell'acquario, dai un'occhiata al Bootcamp Kotlin per programmatoriCorso Udacity.
Informazioni importanti
- Come creare un progetto in IntelliJ IDEA
- Come aprire ed eseguire il codice in REPL (Read-Eval-Print Loop) di Kotlin in IntelliJ IDEA (Tools > Kotlin > Kotlin REPL)
Obiettivi didattici
- Come utilizzare tipi di dati, operatori e variabili di Kotlin
- Come utilizzare valori booleani e condizioni
- La differenza tra variabili nulli e non null
- Come funzionano gli array, gli elenchi e i loop in Kotlin
In questo lab proverai a:
- Collabora con il Kotlin REPL per apprendere le nozioni di base di Kotlin
In questa attività imparerai gli operatori e i tipi di linguaggio del programma Kotlin.
Passaggio 1: esplora gli operatori numerici
- Apri IntelliJ IDEA, se non è già aperto.
- Per aprire il Kotlin REPL, seleziona Tools > Kotlin > Kotlin REPL.
Come per le altre lingue, Kotlin utilizza +
, -
, *
e /
per più, meno, tempi e divisione. Kotlin supporta anche diversi tipi di numeri, come Int
, Long
, Double
e Float
.
- Inserisci le seguenti espressioni nel REPL. Per visualizzare il risultato, premi
Control+Enter
(Command+Enter
su un Mac) dopo ogni aggiornamento.
1+1 ⇒ res8: kotlin.Int = 2 53-3 ⇒ res9: kotlin.Int = 50 50/10 ⇒ res10: kotlin.Int = 5 1.0/2.0 ⇒ res11: kotlin.Double = 0.5 2.0*3.5 ⇒ res12: kotlin.Double = 7.0
Tieni presente che i risultati delle operazioni mantengono i tipi di operandi, quindi 1/2 = 0, ma 1,0/2,0 = 0,5.
- Prova alcune espressioni con diverse combinazioni di numeri interi e decimali.
6*50 ⇒ res13: kotlin.Int = 300 6.0*50.0 ⇒ res14: kotlin.Double = 300.0 6.0*50 ⇒ res15: kotlin.Double = 300.0
- Alcuni metodi sui numeri. Kotlin mantiene i numeri come primitivi, ma consente di chiamare i metodi come numeri, come se fossero oggetti.
2.times(3) ⇒ res5: kotlin.Int = 6 3.5.plus(4) ⇒ res8: kotlin.Double = 7.5 2.4.div(2) ⇒ res9: kotlin.Double = 1.2
Passaggio 2: fai pratica con i tipi
Kotlin non esegue la conversione implicitamente tra i tipi di numeri, quindi non puoi assegnare un valore breve direttamente a una variabile lunga o un Byte
a un Int
. Questo perché la conversione del numero implicito è una fonte comune di errori nei programmi. Puoi sempre assegnare valori di tipi diversi trasmettendoli.
- Per vedere alcuni cast possibili, definisci una variabile di tipo
Int
nel REPL.
val i: Int = 6
- Crea una nuova variabile, poi inserisci il nome della variabile mostrato sopra, seguito da
.to
.
val b1 = i.to
IntelliJ IDEA mostra un elenco di possibili completamenti. Questo completamento automatico funziona per variabili e oggetti di qualsiasi tipo.
- Seleziona
toByte()
dall'elenco, quindi stampa la variabile.
val b1 = i.toByte()
println(b1)
⇒ 6
- Assegna un valore
Byte
a variabili di diverso tipo.
val b2: Byte = 1 // OK, literals are checked statically
println(b2)
⇒ 1
val i1: Int = b2
⇒ error: type mismatch: inferred type is Byte but Int was expected
val i2: String = b2
⇒ error: type mismatch: inferred type is Byte but String was expected
val i3: Double = b2
⇒ error: type mismatch: inferred type is Byte but Double was expected
- Per i compiti che hanno restituito errori, prova a trasmetterli.
val i4: Int = b2.toInt() // OK!
println(i4)
⇒ 1
val i5: String = b2.toString()
println(i5)
⇒ 1
val i6: Double = b2.toDouble()
println(i6)
⇒ 1.0
- Per rendere le costanti numeriche più lunghe e leggibili, Kotlin ti consente di inserire trattini bassi nei numeri, dove ha senso per te. Prova a inserire costanti numeriche diverse.
val oneMillion = 1_000_000 val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010
Passaggio 3: scopri il valore dei tipi di variabili
Kotlin supporta due tipi di variabili: modificabili e non modificabili. Con val
, puoi assegnare un valore una sola volta. Se tenti di assegnare di nuovo qualcosa, verrà visualizzato un errore. Con var
, puoi assegnare un valore e modificarlo in un secondo momento nel programma.
- Definisci le variabili utilizzando
val
evar
, quindi assegna loro nuovi valori.
var fish = 1
fish = 2
val aquarium = 1
aquarium = 2
⇒ error: val cannot be reassigned
Puoi assegnare un valore a fish
, quindi assegnargli un nuovo valore, perché è definito con var
. Tentativo di assegnare un nuovo valore a aquarium
restituisce un errore perché è definito con val
.
Il tipo memorizzato in una variabile viene dedotto quando il compilatore può determinarla nel contesto. Se vuoi, puoi sempre specificare esplicitamente il tipo di variabile, utilizzando la notazione dei due punti.
- Definisci alcune variabili e specifica il tipo in modo esplicito.
var fish: Int = 12
var lakes: Double = 2.5
Dopo che il tipo è stato assegnato da te o dal compilatore, non puoi modificarlo, altrimenti viene visualizzato un errore.
Passaggio 4: scopri di più sulle stringhe
Le stringhe in Kotlin funzionano come le stringhe in qualsiasi altro linguaggio di programmazione utilizzando "
per le stringhe e '
per i singoli caratteri; puoi inoltre concatenare le stringhe con l'operatore +
. Puoi creare modelli di stringa combinandoli con valori; il nome $
variable
viene sostituito con il testo che rappresenta il valore. Questa operazione viene chiamata interpolazione variabile.
- Crea un modello di stringa.
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
⇒ res20: kotlin.String = I have 5 fish and 12 plants
- Crea un modello di stringa contenente un'espressione. Come in altre lingue, il valore può essere il risultato di un'espressione. Utilizza le parentesi graffe
{}
per definire l'espressione.
"I have ${numberOfFish + numberOfPlants} fish and plants"
⇒ res21: kotlin.String = I have 17 fish and plants
In questa attività imparerai i valori booleani e il controllo delle condizioni nel linguaggio di programmazione Kotlin. Come altri linguaggi, Kotlin dispone di valori booleani e operatori booleani come "minore di", uguale a, maggiore di e così via (<
, ==
, >
, !=
, <=
, >=
).
- Scrivi un'istruzione
if
/else
.
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
println("Good ratio!")
} else {
println("Unhealthy ratio")
}
⇒ Good ratio!
- Prova con un intervallo in un'istruzione
if
. In Kotlin possono essere utilizzati anche gli intervalli compresi nel test.
val fish = 50
if (fish in 1..100) {
println(fish)
}
⇒ 50
- Scrivi un
if
con più richieste. Per condizioni più complicate, utilizza i valori logici e&&
e logici o||
. Come per le altre lingue, puoi avere più richieste utilizzandoelse if
.
if (numberOfFish == 0) {
println("Empty tank")
} else if (numberOfFish < 40) {
println("Got fish!")
} else {
println("That's a lot of fish!")
}
⇒ That's a lot of fish!
- Prova un'istruzione
when
. Esiste un modo migliore per scrivere la serie di istruzioniif
/else if
/else
in Kotlin, utilizzando l'istruzionewhen
, che è come l'istruzioneswitch
in altre lingue. Anche le condizioni in un'istruzionewhen
possono utilizzare intervalli.
when (numberOfFish) {
0 -> println("Empty tank")
in 1..39 -> println("Got fish!")
else -> println("That's a lot of fish!")
}
⇒ That's a lot of fish!
In questa attività, verranno messe a confronto le variabili nulle e non nulli. Gli errori di programmazione che coinvolgono elementi sono stati la causa di innumerevoli bug. Kotlin cerca di ridurre i bug introducendo variabili non null.
Passaggio 1: scopri di più sulla nullità
Per impostazione predefinita, le variabili non possono essere null
.
- Dichiara un
Int
e assegnaglinull
.
var rocks: Int = null
⇒ error: null can not be a value of a non-null type Int
- Utilizza l'operatore con punto interrogativo
?
dopo il tipo per indicare che una variabile può essere nulla. Dichiara unInt?
e assegnaglinull
.
var marbles: Int? = null
In presenza di tipi di dati complessi, ad esempio un elenco:
- Puoi consentire che gli elementi dell'elenco siano nulli.
- Puoi consentire l'annullamento della visualizzazione dell'elenco, ma se non è null, i suoi elementi non possono essere vuoti.
- Puoi consentire che sia l'elenco sia gli elementi siano nulli.
Gli elenchi e alcuni altri tipi di dati complessi verranno trattati in un'attività successiva.
Passaggio 2: scopri di più sulle e gli operatori ?:
Puoi testare null
con l'operatore ?
, evitando così di dover scrivere molte istruzioni if
/else
.
- Scrivi un codice più lungo per verificare se la variabile
fishFoodTreats
non ènull
. Puoi anche diminuire la variabile.
var fishFoodTreats = 6
if (fishFoodTreats != null) {
fishFoodTreats = fishFoodTreats.dec()
}
- Ora scrivi lo stile del Kotlin utilizzando l'operatore
?
.
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
- Puoi anche concatenare test nulli con l'operatore
?:
. Guarda questo esempio:
fishFoodTreats = fishFoodTreats?.dec() ?: 0
È l'abbreviazione di "se fishFoodTreats
non è null
, riduci e utilizzalo; altrimenti, utilizza il valore dopo ?:
, che è 0." Se fishFoodTreats
è null
, la valutazione viene interrotta e il metodo dec()
non viene chiamato.
Un punto sui puntatori nulli
Se ami NullPointerExceptions
, Kotlin te lo consente. L'operatore dell'asserzione non null, !!
(bang-bang), converte qualsiasi valore in un tipo non null e genera un'eccezione se il valore è null
.
val len = s!!.length // throws NullPointerException if s is null
In questa attività imparerai gli array e gli elenchi e scoprirai i diversi modi per creare loop nel linguaggio di programmazione Kotlin.
Passaggio 1: crea elenchi
Gli elenchi sono un tipo fondamentale di Kotlin e sono simili agli elenchi di altre lingue.
- Dichiara un elenco utilizzando
listOf
e stampalo. Questo elenco non può essere modificato.
val school = listOf("mackerel", "trout", "halibut")
println(school)
⇒ [mackerel, trout, halibut]
- Dichiara un elenco che può essere modificato utilizzando
mutableListOf
. Rimuovi un elemento.
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
⇒ res36: kotlin.Boolean = true
Il metodo remove()
restituisce true
quando l'elemento viene rimosso correttamente.
Passaggio 2: crea gli array
Come altre lingue, il Kotlin ha array. A differenza degli elenchi in Kotlin, che sono versioni modificabili e immutabili, non esiste una versione modificabile di un Array
. Una volta creata un array, le sue dimensioni sono fisse. Non puoi aggiungere o rimuovere elementi, tranne copiarli in un nuovo array.
Le regole relative all'utilizzo di val
e var
sono le stesse per gli array e per gli elenchi.
- Dichiara un array di stringhe utilizzando
arrayOf
. Utilizza l'utilitàjava.util.Arrays.toString()
per stamparla.
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
⇒ [shark, salmon, minnow]
- Un array dichiarato con
arrayOf
non ha un tipo associato agli elementi, quindi puoi mescolare i tipi, funzionalità utili. Dichiara un array con tipi diversi.
val mix = arrayOf("fish", 2)
- Puoi anche dichiarare gli array con un solo tipo per tutti gli elementi. Dichiara un array di numeri interi utilizzando
intArrayOf()
. Sono disponibili builder, o funzioni di creazione di istanze, per array di altri tipi.
val numbers = intArrayOf(1,2,3)
- Combina due array con l'operatore
+
.
val numbers = intArrayOf(1,2,3)
val numbers3 = intArrayOf(4,5,6)
val foo2 = numbers3 + numbers
println(foo2[5])
=> 3
- Prova diverse combinazioni di array ed elenchi nidificati. Come in altre lingue, puoi nidificare array ed elenchi. In altre parole, quando inserisci un array all'interno di un array, il risultato è un array di array, non un array dei due contenuti. Gli elementi di un array possono essere anche elenchi, mentre gli elementi di elenchi possono essere array.
val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
⇒ [[I@89178b4, [Atlantic, Pacific], salmon]
Il primo elemento, numbers
, è un Array
. Quando non utilizzi l'utilità array per stamparla, Kotlin stampa l'indirizzo anziché il contenuto dell'array.
- Una funzionalità interessante di Kotlin è che puoi inizializzare gli array con il codice invece di inizializzarli su 0. Prova questo esempio:
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
⇒ [0, 2, 4, 6, 8]
Il codice di inizializzazione è compreso tra parentesi graffe, {}
. Nel codice, it
fa riferimento all'indice dell'array, che inizia con 0.
Passaggio 3: crea i loop
Ora che disponi di elenchi e array, il loop degli elementi funziona come previsto.
- Crea un array. Usa un loop
for
per iterare l'array e stampare gli elementi.
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
⇒ shark salmon minnow
- In Kotlin puoi impostare il loop degli elementi e degli indici contemporaneamente. Prova questo esempio:
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
⇒ Item at 0 is shark Item at 1 is salmon Item at 2 is minnow
- Prova dimensioni e intervalli di passaggi diversi. Puoi specificare intervalli alfabetici di numeri o caratteri. E come in altre lingue, non devi fare un passo in avanti di uno. Puoi tornare indietro utilizzando
downTo
.
for (i in 1..5) print(i)
⇒ 12345
for (i in 5 downTo 1) print(i)
⇒ 54321
for (i in 3..6 step 2) print(i)
⇒ 35
for (i in 'd'..'g') print (i)
⇒ defg
- Prova qualche ciclo. Come altre lingue, Kotlin ha
while
loop,do...while
loop e++
e--
operatori. Kotlin ha ancherepeat
loop.
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
repeat(2) {
println("A fish is swimming")
}
⇒ 50 bubbles in the water 49 bubbles in the water A fish is swimmingA fish is swimming
Kotlin è molto simile ad altre lingue per quanto riguarda le nozioni di base, come gli operatori, gli elenchi e i loop, ma esistono alcune differenze importanti.
In Kotlin le seguenti funzionalità potrebbero essere diverse da quelle che usi per altre lingue:
- I tipi di Kotlin non possono essere implicitamente convertiti. Utilizza la trasmissione.
- Le variabili dichiarate con
val
possono essere assegnate una sola volta. - Le variabili Kotlin non sono nulli per impostazione predefinita. Utilizza
?
per rendere nulle le variabili. - Con Kotlin puoi eseguire il loop dell'indice e degli elementi di un array contemporaneamente in un loop
for
.
I seguenti costrutti di programmazione Kotlin sono simili a quelli in altre lingue:
- Gli array e gli elenchi possono avere un solo tipo o tipi misti.
- È possibile nidificare array ed elenchi.
- Puoi creare loop con
for
,while
,do
/while
erepeat
. - L'istruzione
when
è la versione Kotlin dell'istruzioneswitch
, mawhen
è più flessibile.
Documentazione di Kotlin
Se vuoi saperne di più su qualsiasi argomento del corso o se ti blocchi, https://kotlinlang.org è il punto di partenza migliore.
- Conversione di tipo esplicito
- Definizione delle variabili
- Modelli di stringa
- Valori null
- Elenchi
- Array
if
,when
,for
ewhile
- Operatore
?:
(Elvis) - Operatore
!!
Tutorial su Kotlin
Il sito web https://try.kotlinlang.org include tutorial avanzati chiamati Kotlin Koans, un interprete basato sul Web, e una serie completa di documentazione di riferimento con esempi.
Corso Udacity
Per visualizzare il corso Udacity su questo argomento, consulta il Kotlin Bootcamp for Programrs.
IDA IntelliJ
La documentazione relativa a IntelliJ IDEA è disponibile sul sito web di JetBrains.
In questa sezione sono elencati i possibili compiti per gli studenti che lavorano attraverso questo codelab nell'ambito di un corso tenuto da un insegnante. Spetta all'insegnante fare quanto segue:
- Assegna i compiti, se necessario.
- Comunica agli studenti come inviare compiti.
- Valuta i compiti.
Gli insegnanti possono utilizzare i suggerimenti solo quanto e come vogliono e dovrebbero assegnare i compiti che ritengono appropriati.
Se stai lavorando da solo a questo codelab, puoi utilizzare questi compiti per mettere alla prova le tue conoscenze.
Rispondi a queste domande
Domanda 1
Quale dei seguenti elementi dichiara un elenco di stringhe non modificabili?
▢ val school = arrayOf("shark", "salmon", "minnow")
▢ var school = arrayOf("shark", "salmon", "minnow")
▢ val school = listOf("shark", "salmon", "minnow")
▢ val school = mutableListOf("shark", "salmon", "minnow")
Domanda 2
Quale sarà l'output del seguente codice?for (i in 3..8 step 2) print(i)
▢: 345678
▢ 468
▢ 38
▢ da 357
Domanda 3
Qual è lo scopo del punto interrogativo in questo codice?var rocks: Int? = 3
▢ Il tipo di variabile rocks
non è fisso.
▢ La variabile rocks
può essere impostata su null.
▢ Non è possibile impostare la variabile rocks
su null.
▢ La variabile rocks
non deve essere inizializzata subito.
Passa alla lezione successiva:
Per una panoramica del corso, inclusi i link ad altri codelab, vedi "Kotlin Bootcamp for Programs: Welcome to the Course."