Conditions et itérations
Ce guide montre comment exprimer une règle métier déterministe dans Touba. Une décision calculable n'a pas besoin d'être confiée à un modèle.
Choisir un chemin
if / else if / else examine les conditions dans l'ordre et exécute la
première branche retenue. Chaque condition doit être un Boolean.
Ces contrôles se composent dans les fonctions, skills et stratégies.
module examples.triage
type Ticket
id is Text
overdue_days is Int
active is Boolean
function FirstAction
takes tickets as List of Ticket
gives Optional of Text
do
for ticket in tickets
if ticket.active
if ticket.overdue_days >= 7
give some("Urgent: " ++ ticket.id)
else if ticket.overdue_days >= 3
give some("Follow up: " ++ ticket.id)
give none(Text)
La fonction parcourt les tickets dans l'ordre et retourne l'action du premier ticket actif à suivre : urgente à partir de sept jours, relance à partir de trois jours. Si aucun ne correspond, elle retourne une absence. Elle ne trie pas la liste par urgence.
Pour un choix enum fermé, utilisez match / case : le compilateur vérifie que chaque membre est traité exactement une fois.
Parcourir sans mutation implicite
for item in itemsparcourt une liste typée dans son ordre.bindet les résultatsintosont locaux à leur bloc ; ils ne réaffectent pas une variable de la portée appelante.givetermine l'appel courant, même depuis une boucle imbriquée.whileutilise la limite hôtemax_loop_iterations(100 par défaut). Chaque boucle est bornée ; atteindre la limite produit un refus runtime. La source ne contient aucune clausemax_iterations. Voir la référence syntaxique.
Une boucle n'ajoute pas un accumulateur mutable. Pour transformer chaque
élément en un résultat, utilisez une cible typée dans une stratégie ou une
skill et le parallélisme borné. Pour une recherche
du premier élément, un for avec retour anticipé convient.
Exemple de limite hôte
module examples.bounded_loop
function Wait
takes repeat as Boolean
gives Text
do
while repeat
bind observed as Boolean = repeat
give "Ready"
touba compile bounded-loop.tb --out bounded-loop.air.json
touba run bounded-loop.air.json --entry function:examples.bounded_loop/Wait --inputs-json '{"repeat":false}' --max-loop-iterations 3 --output json
Avec false, le résultat est Ready. Avec true, la condition reste vraie :
la limite hôte arrête la boucle après trois itérations. L'option CLI
--max-loop-iterations règle max_loop_iterations du runtime.
Conserver les contrôles d'exécution
Répéter un appel ne donne aucune autorité supplémentaire. Les capacités déclarées, grants, scopes et budgets du run restent vérifiés à chaque appel. Une capacité autorisée peut être utilisée plusieurs fois, tant que ses contraintes le permettent.
Les boucles et conditions n'empêchent pas une pause humaine : la continuation conserve les appels et les portées nécessaires à la reprise. Consultez Reprise durable pour choisir le mécanisme adapté.
Essayer
Le tutoriel de classification combine enum, optionnel et branches avec des entrées JSON et des résultats vérifiables.