Manuale interattivo

Kotlin da zero

Un manuale interattivo: modifichi il codice, lo esegui e vedi subito il risultato, con errori spiegati in italiano, pannello delle variabili, esercizi guidati e verifiche sempre nuove.

Cosa trovi in questa pagina

Come funziona questo manuale

Ogni esempio è un laboratorio: una casella con dentro del codice Kotlin. Puoi cambiare il codice come vuoi e l'esecuzione parte da sola dopo mezzo secondo; sotto la casella c'è una console che mostra il risultato vero del programma (quello che Kotlin chiama output). Funziona come la finestra Run di IntelliJ: se il programma chiede un dato con readln() (o readlnOrNull()), l'output si ferma lì e il cursore di scrittura compare in coda al testo, nel punto esatto in cui il programma sta leggendo. Nessun dato viene dato al posto tuo: scrivi tu il valore (le lettere compaiono nella console, una dopo l'altra) e premi Invio.

Elemento del laboratorioA cosa serve
▶ Eseguilancia il programma subito (con Ctrl+Invio dalla casella del codice)
↺ Ripristinarimette il codice originale dell'esempio
Console scural'output del programma; i valori che scrivi tu compaiono in giallo nella sequenza, come in una console vera
Cursore nella consolequando il programma aspetta un dato, il cursore si posiziona in fondo all'output (anche subito dopo una print senza a capo): scrivi il valore e premi Invio, un valore per ogni readln(). Un clic in un punto qualsiasi della console riporta il cursore in fondo
Barra sotto la consoleti dice quando il programma è in attesa, e ti dà i pulsanti ⏎ prova con i dati dell'esempio (facoltativo: riempie lui i dati preparati per l'esempio), ✕ azzera i dati e ⏹ fine dei dati
⏹ fine dei dati / Ctrl+Dcome in una console vera: dichiara che i dati sono finiti. Da quel momento readlnOrNull() restituisce null e readln() si ferma con un errore: è il modo per vedere come il programma gestisce i dati che mancano
Stato ⏸ in attesa di dati…il programma è fermo e sta aspettando che tu scriva nella console: niente va avanti se prima non premi Invio
Variabilila fotografia delle variabili dopo l'esecuzione, con tipo e valore
⚡ auto: onin alto a destra: spegne o riaccende l'esecuzione automatica
Il computer fa esattamente quello che scrivi

Se vedi un errore, non ti preoccupare: gli errori fanno parte dell'imparare. Il manuale traduce i messaggi di errore in italiano e, dove serve, ti dice come rimediare. I progressi (capitoli completati ed esercizi risolti) vengono salvati in questo browser.

Un manuale, non un corso completo

Qui impari le basi con un motore didattico che esegue direttamente nella pagina i costrutti spiegati (variabili, input/output, condizioni, cicli, array, liste, mappe, stringhe, classi e data class). Quando vuoi provare altro, passa a un vero ambiente di sviluppo: copia il codice con 📋 Copia e incollalo in IntelliJ IDEA, l'ambiente gratuito con cui si programma Kotlin sul serio. Il capitolo 11 ti guida passo passo: installazione, primo progetto e come scrivere i dati in input.

Attenzione ai siti di prova online ("playground"): vanno bene per esperimenti senza input, ma non permettono di scrivere i dati durante l'esecuzione, quindi i programmi con readln() restano bloccati. Con IntelliJ IDEA funzionano tutti.

Metodo di studio in quattro passi

Questo manuale non è fatto per essere letto come un romanzo: è fatto per essere usato. Ogni capitolo segue sempre lo stesso ritmo, e seguirlo ti farà risparmiare tempo.

PassoChe cosa faiPerché serve
1. Ripasso lamporispondi alle due domande in apertura di capitolorichiamare quello che sai già rende più facile agganciare le cose nuove
2. Leggi ed eseguisegui gli esempi, cambia il codice e guarda che cosa succedeil codice che hai modificato tu si ricorda molto meglio
3. Prevedi l'outputnei riquadri Prevedi l'output scrivi che cosa stampa il programma prima di eseguirloè il modo più rapido per scoprire se hai davvero capito
4. Esercitati e verificafai gli esercizi guidati, poi l'esercizio Trova e correggi gli errori, la verifica a fine capitolo e l'autovalutazioneallenarsi su casi sempre nuovi, imparare a leggere i messaggi di errore e sapere che cosa ripassare

Sei un docente? C'è anche una guida didattica, con la mappa dei capitoli, i tipi di esercizio con il loro scopo, i prerequisiti fra capitoli e un percorso di lezioni già pronto.

I riquadri che incontrerai

Oltre ai laboratori di codice, il manuale usa alcuni riquadri pensati per farti ragionare. Eccoli tutti, con quello che devi fare quando li incontri.

RiquadroCome funziona
Laboratorio (▶ Esegui, console, variabili)modifichi il codice ed esegui: la console in basso mostra l'output vero e, quando il programma chiede un dato, il cursore compare in coda all'output e aspetta quello che scrivi tu
Visualizzatore (🏷 visualizzatore)mostra come il programma arriva al risultato: vedi le variabili disegnate una per una, le stringhe carattere per carattere, le caselle degli array con i loro indici, le coppie chiave-valore delle mappe, i campi degli oggetti, la pista dei giri dei cicli e il ramo scelto dalle condizioni. Puoi scorrere i passi avanti e indietro
Prevedi l'outputscrivi la tua previsione riga per riga, premi Confronta e vedi evidenziate le differenze fra quello che ti aspettavi e quello che il programma fa davvero
Quizscegli una risposta: se sbagli ti dice perché quella risposta è sbagliata, poi puoi ritentare
Esercizio guidatoprovi da solo, puoi chiedere un suggerimento e poi confrontarti con la soluzione spiegata passo per passo
Trova e correggi gli erroriil programma di partenza contiene errori tipici: lo esegui, leggi il messaggio, correggi un errore alla volta e confronti il risultato con la soluzione
Verifica (🎲)esercizi sempre nuovi sugli argomenti che hai già studiato; il contatore ti dice quanti ne hai risolti
Autovalutazionea fine capitolo spunti quello che sai fare: quello che resta vuoto è la tua lista di ripasso

Come si usa il visualizzatore

Nei laboratori con l'etichetta visualizzatore il pannello grafico mostra lo stato del programma passo per passo. Non è un disegno decorativo: è la fotografia di quello che il computer ha in memoria mentre esegue, e sotto ogni passo trovi la spiegazione in italiano di che cosa è appena successo.

ComandoA cosa serve
e un passo indietro e un passo avanti: ottimo per capire dove una variabile cambia valore
▶ animafa scorrere i passi da sola, come un filmato; ripremuto mette in pausa
Barra dei passiti porta dove vuoi: puoi anche usare e da tastiera
Codice a sinistrala riga in esecuzione è evidenziata; le altre restano leggibili per contesto
Schede a destrauna scheda per variabile, con il tipo e il valore disegnato secondo il tipo di dato
Bordo verde o gialloverde: variabile appena creata; giallo: variabile che è appena cambiata
Riquadro del flussoper i cicli: la pista dei giri con quello attivo evidenziato; per le condizioni: l'esito true/false e il ramo scelto
Consolemostra solo l'output stampato fino a quel passo: tornando indietro si accorcia, come se il programma non fosse ancora arrivato a quella riga
Riga «rispetto all'esecuzione precedente»dopo che hai modificato il codice ti dice in una riga che cosa è cambiato nel risultato, per esempio somma 21 → 18: è l'effetto della tua modifica
Il disegno segue quello che scrivi

I laboratori con il visualizzatore servono proprio a questo: cambi un valore nel codice, per esempio i numeri dentro un array, e guardi che cosa cambia nel disegno. Il pannello si rifà da solo, ti lascia al passo che stavi guardando (così vedi l'effetto proprio sul punto che ti interessava) e sotto la barra dei comandi ti dice che cosa è cambiato rispetto all'esecuzione precedente. La prima volta è lui a invitarti a provare, con la riga ✎ Prova a cambiare i valori nel codice.

Se il codice è scritto a metà — una parentesi aperta, un numero incompleto — il disegno dell'ultima versione eseguibile resta al suo posto, con un avviso che lo spiega, invece di sparire a ogni tasto: puoi continuare a sperimentare senza perdere il punto.

Le tre domande a cui il visualizzatore risponde
  1. "Perché il risultato è questo?" Scorri i passi e guarda la variabile cambiare, invece di indovinare.
  2. "Quante volte gira questo ciclo?" Conta le caselle accese nella pista dei giri e confrontale con la condizione.
  3. "Che cosa succede davvero in memoria?" Guarda il disegno della lista, della mappa o dell'oggetto: le stringhe sono caselle per carattere, le mappe sono coppie chiave valore, gli oggetti sono i loro campi con val o var.
Il modo giusto di sbagliare

Quando un riquadro ti segnala un errore, non cancellare tutto: leggi il messaggio, trova la riga indicata e cambia una cosa alla volta. Il messaggio dice sempre che cosa Kotlin non ha capito, e nella maggior parte dei casi il problema è una parentesi, una virgoletta o un nome scritto in modo diverso.

Prova il riquadro "Prevedi l'output"

Funziona così: scrivi che cosa secondo te compare nella console, poi premi Confronta. Prova con questo esempio, anche sbagliando: le differenze evidenziate sono la parte più utile.

  1. punti parte da 4 e diventa 5: la prima riga stampa Giulia ha 5 punti.
  2. Il template $nome inserisce il valore della variabile dentro al testo.
  3. La seconda riga non usa il template ma la concatenazione con +: il risultato è lo stesso testo, Ciao Giulia.

Glossario: i termini del manuale

Ogni termine con il capitolo in cui viene spiegato. Quando non ricordi una parola, cerca qui prima di rileggere tutto il capitolo.

TermineChe cosa significaDove
Inttipo dei numeri interi (5, -12)2
Doubletipo dei numeri con la virgola, scritti con il punto (3.5)2
Stringtipo del testo, sempre fra virgolette doppie1, 8
Booleantipo che vale solo true o false2
Charun singolo carattere, fra apici singoli ('a')2
valcostante: il valore non cambia più2
varvariabile: il valore può cambiare durante il programma2
template di stringascrivere $nome o ${espressione} dentro al testo per inserirci un valore2
conversionecambiare tipo a un valore: "42".toInt(), 7.toString()2, 3
readln()legge una riga scritta dall'utente e la restituisce come testo3
readlnOrNull()come readln(), ma restituisce null se i dati sono finiti3
null"nessun valore": non è 0, non è "", è l'assenza del valore3
?. e ?:operatori per usare un valore che può mancare: "se c'è" e "altrimenti questo"3
condizioneespressione che vale true o false, usata da if e while4
whenmodo ordinato di scegliere fra molti casi4
cicloblocco di istruzioni ripetuto più volte5
intervallosequenza di numeri come 1..5, 0 until 5, 10 downTo 15
contatorevariabile che conta quante volte succede qualcosa5
accumulatorevariabile che somma (o moltiplica) i valori uno dopo l'altro5
break / continueesci subito dal ciclo / salta al giro successivo5
arraycollezione a dimensione fissa, con posizioni numerate da 06, 10
listacollezione che cresce e si accorcia: mutableListOf (modificabile), listOf (no)6
indicela posizione di un elemento, che parte da 0; l'ultimo è size - 16
lambdail pezzetto di codice fra graffe che si passa a filter, map, sortedBy: { it * 2 }6
mappacollezione di coppie chiave-valore: si legge la voce con la chiave, non con la posizione7
chiave / valorenella mappa "Anna" to 30, la chiave è "Anna" e il valore è 307
split / joinToStringspezza un testo in una lista / rimette insieme una lista in un testo8
substringprende un pezzo di testo: dall'indice di inizio (compreso) a quello di fine (escluso)8
formatdà al numero l'aspetto che vuoi: "%.2f".format(prezzo) (extra: per i report)8
padStart / padEnd / repeatcompleta un testo a sinistra / a destra / ripete un testo n volte (extra: per tabelle e codici)8
isEmpty / isBlankcontrolla se un testo è vuoto o fatto di soli spazi8
trimStart / trimEndtoglie gli spazi solo dall'inizio o solo dalla fine del testo8
lastIndexOfcome indexOf, ma cerca l'ultima occorrenza invece della prima8
replaceFirstsostituisce solo la prima occorrenza (extra: replace le sostituisce tutte)8
reversedrestituisce il testo letto al contrario (utile per i palindromi)8
until / downTo / stepvarianti dell'intervallo: esclude l'ultimo / conta all'indietro / va a salti5
classedescrizione di un "tipo di cosa", con i suoi dati e le sue funzioni9
data classclasse pensata per tenere dati: toString, ==, copy e destrutturazione arrivano gratis9
oggetto / istanzauna cosa concreta creata da una classe: Persona("Mario", 30)9
proprietàun dato dell'oggetto: persona.nome. Con val non cambia, con var9
metodouna funzione che appartiene a una classe e si chiama con oggetto.metodo()9
copy()crea un oggetto nuovo con gli stessi valori, tranne quelli che indichi9
find / filtercerca il primo elemento che rispetta una condizione / tiene tutti quelli che la rispettano10
sortedBy / sortedByDescendingordina un elenco di oggetti in base a una proprietà, in modo crescente / decrescente10
maxByOrNulltrova l'oggetto con il valore più alto (può dare null se l'elenco è vuoto)10
groupByraggruppa gli oggetti per categoria: restituisce una mappa categoria elenco10
reportprogramma che scorre un elenco di dati, calcola dei totali e li stampa in modo ordinato10
IDEambiente di sviluppo integrato: l'editor con cui si scrivono i programmi veri (IntelliJ IDEA)11
JDKil pacchetto che serve a compilare ed eseguire i programmi Kotlin11
fun main()la funzione da cui parte ogni programma Kotlin completo1, 11
compilazionela traduzione del codice in istruzioni eseguibili: se qualcosa non va, il programma non parte11
Le tre domande da farsi davanti a un errore
  1. Su che riga? Il messaggio dice sempre la riga: guarda prima quella.
  2. Che tipo di errore è? Parentesi o virgolette non chiuse, nome scritto diversamente, valore null usato senza protezione, indice fuori dai limiti.
  3. Che cosa mi aspettavo? Se il programma parte ma il risultato è sbagliato, il problema non è la sintassi ma la logica: rileggi un'istruzione alla volta e stampa i valori intermedi con println.

Il percorso in 11 capitoli

Segui l'ordine: ogni capitolo usa solo quello che hai imparato nei capitoli precedenti.

Come si danno i dati in input: la console interattiva

Quando un programma ha bisogno di dati (per esempio chiede il nome all'utente), Kotlin usa readln(): legge una riga di testo e la restituisce come String. Nel manuale funziona esattamente come nella finestra Run di IntelliJ: l'output scorre nella console e, quando serve un dato, il cursore compare lì dove il programma sta leggendo. Tu scrivi il valore e premi Invio: un valore per ogni readln(), nell'ordine in cui il programma li chiede. Quello che hai scritto resta nella console insieme al resto dell'output.

L'esempio qui sotto chiede tre dati, uno alla volta: il cursore si ferma dopo ogni domanda. Scrivi Giulia e premi Invio; poi 2008; poi l'anno in cui siamo. Ogni volta il programma riparte da dove si era fermato. Prova anche a cambiare il codice in modo che chieda un dato in più.

Se invece vuoi vedere che cosa fa il programma quando i dati finiscono, premi Ctrl+D (o il pulsante ⏹ fine dei dati): da quel momento readln() si ferma con l'errore "non ha trovato altri dati in input", mentre readlnOrNull() restituisce null — è la differenza che spiega il capitolo 3.

Tre abitudini che ti faranno risparmiare tempo