Introduzione a Kotlin: Costrutti base

Adesso, dopo aver fatto l'Hello World! e la lettura da tastiera, mi sono stancato di testare a caso e cerco online qualcosa. Trovo una pagina in italiano che spiega un po' i costrutti if, else, while... L'if e l'else molto simili a quelli del Java e C# (in quanto accettano solo un valore booleano)

  1. Andiamo via veloci, iniziando con il classico if. La sintassi è semplice:

if (espressione booleana) {

codice

}

if (espressione booleana) {

codice

}

else {

codice

}

if (espressione booleana 1) {

codice

}

else if (espressione booleana 2) {

codice

}

else if (espressione booleana 3) {

codice

}

..... altri eventuali branch che iniziano con else if (espressione booleana n-esima) {}

else {

codice

}

  1. Con "espressione booleana" si intende un'istruzione che restituisce un valore booleano, cioè vero o falso.

Ma poi noto qualcosa di strano: L'istruzione when, dalle mie conoscenze di inglese deduco che sia una specie di if/else o switch. E lo è!

fun main(args: Array<String>) {

print("Inserisci un valore: ")

val x1 = Integer.parseInt(readLine())

when(x1)

{

0 -> println("Inserito il valore 0")

1 -> println("Inserito il valore 1")

2 -> println("Inserito il valore 2")

else -> println("Inserito valore diverso da 0, 1 o 2")

}

}

Infatti sembra proprio uno switch con, però, un formalismo assai diverso. Bello!

Poi noto questa nota:

  1. Possiamo anche comprendere più casi insieme, separando i valori con una virgola:

when(x1) {

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -> println("Inserito valore < 10")

else -> println("Inserito valore in doppia cifra")

}

  1. Se volete, è anche meglio, in casi come questo, utilizzare una scrittura alternativa:

when(x1) {

in 0..9 -> println("Inserito valore < 10")

else -> println("Inserito valore in doppia cifra")

}

  1. Inoltre possiamo anche il when come completa alternativa a if, questo si ottiene quando non si propone un argomento a when; in quel caso ogni branch è caratterizzato dalla presenza di una espressione booleana e quindi viene eseguito il branch che sottende la prima espressione che risulta true:

when {

(x1 % 2 == 0) -> println("Pari")

(x1 % 2 != 0) -> println("Dispari")

}

Infine ultima nota brutta e bella del Kotlin: non esiste l'operatore ternario, ma sia l'if che il when possono essere usati come alternativa:

var s1 = if(x1 == 3) 5 else if(x1 == 4) 6 else 0

var s2 = when(x1) {

3 -> 5

4 -> 6

else -> 0

}

Queste piccolezze sono utili, e rendono leggibile l'operatore ternario, tanto odiato da certe persone. Poi passo al for, e più che for è un foreach, ma tanto sappiamo che per le cose che il foreach non riesce a fare c'è il while. Il costrutto verrà analizzato in dettaglio in futuro, ma intanto lascio un esempio:

for (x2 in 1..x1) {

println(x2)

}

L'operatore .., come si immagina serve per creare un range di elementi.

Pero noto questa cosa interessante:

  1. se volete cambiare il passo dovrete usare step:

for (x2 in 1..x1 step 2)

  1. terrà il passo due, saltando quindi un elemento ogni due.
  2. Un altro problema spesso ignorato è quello di percorrere il ciclo all'inverso, ovvero dall'elemento a più alto valore a quello più basso. Non funziona scrivere

for (x in 100..1) // sbagliato. Attenzione che però l'operatore di range non genera nessuna eccezione, ma diventa un nullo

  1. il ciclo non partirebbe neanche, la scrittura giusta è:

for (x in 100 downTo> 1)

  1. anche in questo caso si può aggiungere uno step.

Amaramente noto che il while e do-while sono intatti come nei classici linguaggi (qualche modifica ci stava, per esempio per ripristinare il for eliminato...)

while (x2 < x1) {

println(x2)

x2++

}

do {

println(x2)

x2++

} while(x2 < x1)

results matching ""

    No results matching ""