Kotlin Language

Selezione con when

In Kotlin when è l'istruzione di selezione nota come switch in molti altri linguaggi (C#, Java ecc...). Si tratta istruzione molto comoda che puà anche fungere come elegante alternativa a if risultando utile nei casi in cui si deve effettuare una selezione molto ramificata. L'istruzione ha il formato, base, come segue:

when(elemento)
{
valore-1 -> istruzione
valore-2 -> istruzione
else -> istruzioni
}

e proponiamo quindi l'esempio relativo:

  Esempio w1
1
2
3
4
5
6
7
8
9
10
11
12
fun main(args: Array<String>): Unit
{
  print("Inserisci un valore: ")
  val s1 = readLine()
  val x1 = s1!!.toInt()
  when (x1)
  {
    1 -> print("x vale 1")
    2,3 -> print("x1 vale 2 o 3")
    else -> print("x1 > 3 o < 0")
  }
}

precisiamo subito che la clausola else è obbligatoria a meno che il compilatore non sia messo in grado di comprendere che l'intero range della casistiche possibili è coperto dalle ramificazioni precedenti.
Il primo ampliamento all'esempio basilare w1 nasce dalla considerazione che è possibile si presentino più istruzioni legato ad ogni singolo branch; in questo caso tali istruzioni devono essere racchiuse tra parentesi graffe. Ovvero, modificando il formalismo precedente:

valore 1 ->
{
  istruzione 1
  istruzione 2
  .....
}


Altro punto importante è la possibilità di includere più valori in un solo ramo. Tali valori devono essere separati da un virgola. Modifichiamo ancora la definizione:

valore 1, valore 2, ... ->istruzione

oppure aggiungendo le graffe se si hanno più istruzioni, come visto.
When è molto elastico come funzionamento, ad esempio giocando un po' con i range:

  Esempio w2
1
2
3
4
5
6
7
8
9
10
11
12
fun main(args: Array<String>): Unit
{
  print("Inserisci un valore: ")
  val s1 = readLine()
  val x1 = s1!!.toInt()
  when (x1)
  {
    in 1..10 -> print("Sei nel primo range")
    !in 10..20 -> print("Sei out")
    else -> print("Ci sei cascato")
  }
}

Per quanto riguarda l'esempio chiariamo che a in b significa "b contiene " mentre a !in b significa "a è al di fuori di b".