7. Contrôle de flux
7. Contrôle de flux
Le contrôle de flux est la grammaire de votre logique. Si elle est confuse, votre programme le sera aussi. La simplicité des branches est une forme de robustesse.
Conditions
Les conditions doivent rester lisibles. Évitez les expressions trop denses.
entry main at core/app {
if ready { return 0 }
return 1
}
Boucles
Vitte propose des formes simples :
entry main at core/app {
loop {
if done { break }
}
for item in items {
continue
}
return 0
}
Match
match est utile quand plusieurs cas sont possibles. Utilisez‑le pour clarifier l’intention.
entry main at core/app {
match 1 {
case x { }
otherwise { }
}
return 0
}
Lisibilité avant tout
Un flux de contrôle trop dense rend les bugs invisibles. Privilégiez les branches courtes et les retours explicites.
Gérer l’erreur tôt
Dans un code système, les erreurs sont normales. La bonne stratégie consiste à les traiter tôt, puis à continuer sur un chemin propre. C’est moins élégant, mais beaucoup plus fiable.
Sortir proprement
Un retour clair vaut mieux qu’un enchaînement de drapeaux. Le lecteur doit savoir à quel moment la fonction se termine, et pourquoi.
À retenir
La clarté du flux est plus importante que la concision. Les branches doivent être lisibles en un coup d’œil. Traiter l’erreur tôt améliore tout le reste.
Exemple guidé : erreurs d’abord
Réécrivez une fonction qui accumule des erreurs en fin de fonction. Transformez‑la pour gérer les erreurs dès qu’elles arrivent. Comparez la clarté.
Erreurs courantes
Utiliser des flags multiples pour décrire l’état. Écrire des conditions imbriquées trop profondes. Oublier un cas dans match.
Checklist flux
Les branches sont courtes. Les sorties sont explicites. Les erreurs sont gérées tôt.
Exercice : aplatir une logique
Transformez une chaîne de if/else imbriqués en match ou en retours précoces. Lisez ensuite votre code à voix haute : est‑il plus facile à expliquer ?
Code complet (API actuelle)
use std/kernel/fs
use std/core/types.i32
proc open_or_fail(path: string) -> i32 {
let fd = fs.open_read(path)
if fd < 0 { give -1 }
give fd
}
API idéale (future)
Un type Result pour les opérations système afin d’éviter les valeurs sentinelles.