Structures de contrôle
if / else
if ton.x < 10 {
print("petit")
} else if ton.x < 100 {
print("moyen")
} else {
print("grand")
}
Les parenthèses autour de la condition sont optionnelles.
while
ton.int i = 0
while i < 5 {
print(i)
i++
}
for (style C)
for ton.int i = 0; i < 5; i++ {
print(i)
}
for ... in (itère un tableau ou un dict)
ton.array noms = ["kuro", "rusher", "natlep"]
for ton.n in noms {
print(n)
}
ton.dict scores = {kuro: 10, rusher: 20}
for ton.cle in scores {
print(cle + " -> " + str(scores[cle]))
}
Itérer un ton.dict parcourt ses clés, dans l'ordre où elles ont été écrites ; utilise scores[cle] pour lire la valeur correspondante.
switch / case — pas de fallthrough : chaque case correspondante (ou default, si aucune ne correspond) exécute son propre bloc et le switch est terminé.
switch ton.statut {
case 200, 201: {
print("ok")
}
case 404: {
print("introuvable")
}
default: {
print("autre : " + str(ton.statut))
}
}
Un case peut lister plusieurs valeurs séparées par des virgules. La correspondance utilise les mêmes règles d'égalité que ==. Un break; égaré dans un case (habitude d'autres langages) est inoffensif — il quitte juste le switch plus tôt, puisqu'il n'y a de toute façon pas de fallthrough dont sortir.
break et continue sont pris en charge dans while, for, et for ... in.
Nouvelles formes de for ... in (depuis beta-2.0.0) — le préfixe ton. des variables de boucle est optionnel, une deuxième variable donne l'indice (tableaux, chaînes) ou la valeur (dicts), et on peut itérer directement sur un intervalle ou une chaîne :
for i in 0..3 { print(i) } // 0 1 2
for i in 1..=3 { print(i) } // 1 2 3
for i, name in ["kuro", "rusher"] { print(i, name) }
for key, value in {a: 1, b: 2} { print(key, "=", value) }
for c in "abc" { print(c) }
Chaque itération a son propre scope, donc une fonction créée dans la boucle se souvient de la valeur de son itération :
ton.array fns = []
for i in 0..3 { push(fns, () => i) }
print(fns.map(f => f())) // [0, 1, 2]
Un continue dans un switch lui-même dans une boucle continue maintenant la boucle. catch accepte aussi le nom de l'erreur sans parenthèses : catch err { ... }.