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 { ... }.

Modifier cette page sur GitHub