Tracce
/
Crystal
Crystal
/
Programma
/
Cicli while
Ci

Cicli while in Crystal

1 esercizio

Informazioni su Cicli while

Un ciclo è una struttura di controllo che permette di eseguire del codice ripetutamente in base a una determinata condizione.

Cicli while

Un ciclo while è una struttura di controllo che permette di eseguire del codice ripetutamente in base a una determinata condizione. Il codice all'interno di un ciclo while continua a essere eseguito finché la condizione è vera. I cicli while si usano spesso quando il numero di iterazioni non è noto in anticipo, ma vanno bene in qualsiasi situazione in cui serve un ciclo.

La condizione viene valutata prima che il codice all'interno del ciclo venga eseguito: se la condizione è falsa, il codice dentro il ciclo non verrà mai eseguito.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Quando vuoi iterare su una stringa, puoi farlo sfruttando la lunghezza della stringa.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Cicli until

I cicli until funzionano come i cicli while, con la differenza che il codice all'interno del ciclo continua a essere eseguito finché la condizione non diventa vera. È la stessa differenza che c'è tra if e unless.

i = 0
until i == 3
  puts i
  i += 1
end

Cicli infiniti

Un errore comune con i cicli while è entrare in un «ciclo infinito», che non termina mai. Un ciclo infinito può essere causato da una condizione che non diventa mai vera né falsa. Spesso è colpa di un errore del programmatore, per esempio dimenticare di incrementare la variabile del ciclo. A volte, però, un ciclo infinito è il modo più chiaro per implementare la logica del programma. O è vitale ripetere all'infinito: un server HTTP, per esempio, aspetta una connessione in arrivo, la gestisce e poi aspetta la connessione successiva.

Break

La parola chiave break permette di uscire da un ciclo in anticipo. Può essere comoda quando vuoi uscire da un ciclo in anticipo al verificarsi di certe condizioni.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

Next

La parola chiave next permette di passare direttamente all'iterazione successiva di un ciclo. Può essere comoda quando vuoi saltare determinate iterazioni di un ciclo.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Tipi durante l'iterazione

Il tipo di una variabile può cambiare durante un ciclo. Nell'esempio seguente, il tipo di a è Int32 | String perché nella prima parte del ciclo può essere Int32 oppure String. La variabile a mantiene il tipo Int32 | String solo nella prima parte del ciclo: quando il ciclo inizia contiene un Int32, mentre nella seconda iterazione contiene una String. Questo sistema di tipi multipli sarà spiegato in dettaglio più avanti. Dato però che nella seconda parte del ciclo siamo sicuri che conterrà solo una String, il tipo di a è String in quella parte del ciclo. A runtime non conterrà mai Int32 e String nello stesso momento.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

Usare while come espressione

Un while può essere usato come espressione, cioè come valore di una variabile. Il valore restituito è quello indicato con la parola chiave break. Non restituisce il valore dell'ultima espressione del ciclo.

a = while true
  break 1
end

p a
# => 1

i = 0
a = while i == 0
  i += 1
  1
end

p a
# => nil
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Cicli while

La pratica è bloccata

Sblocca 10 altri esercizi per esercitarti su Cicli while