Aller au contenu principal
Version: 1.0.0

Valeurs immuables avec define et bind

Objectif : nommer des valeurs sans introduire de mutation ni déplacer la logique pure dans un handler.

Syntaxe​

Constante de module :

source.tb
define Name as Type = literal

Valeur locale dans un bloc :

source.tb
bind name as Type = expression

define est visible dans le module. bind est visible seulement dans le flux où il est déclaré.

Exemple​

review-score.tb
module examples.review_score

define ScoreLimit as Float = 0.75
define AcceptedLabel as Text = "accepted"
define ReviewLabel as Text = "review"

function ReviewScore
takes score as Float
takes bonus as Float
gives Text
do
bind adjusted as Float = (score + bonus) / 2.0
bind accepted as Boolean = adjusted >= ScoreLimit
if accepted
give AcceptedLabel
else
give ReviewLabel

Compiler​

Terminal
touba compile review-score.tb --out review-score.air.json

L’AIR contient :

  • les constantes dans definitions.constants ;
  • les calculs purs dans les expressions AIR ;
  • les valeurs locales bind comme nœuds de graphe.

Exécuter​

Terminal
touba run review-score.air.json --inputs-json '{"score":1.0,"bonus":0.8}' --output result

Sortie attendue :

Sortie
"accepted"

La sortie est une chaîne JSON, guillemets compris. Les champs d’entrée invalides, absents ou supplémentaires sont refusés avant l’exécution. Vérifiez le refus de typage sans modifier le programme :

Terminal
if touba run review-score.air.json --inputs-json '{"score":"invalid","bonus":0.8}' --output json; then
exit 1
else
test "$?" -eq 1
fi

Erreurs utiles​

Cette constante est refusée :

source.tb
define BaseScore as Float = 0.5
define ScoreLimit as Float = BaseScore + 0.25

La raison : define accepte seulement des littéraux. Le calcul doit vivre dans une function ou dans un bind local.

Cette valeur locale est refusée :

source.tb
bind accepted as Boolean = title

La raison : le type déclaré est Boolean, mais l’expression produit ici un Text.

À retenir​

Utilisez define pour des seuils ou libellés non sensibles. Utilisez bind pour rendre un calcul local lisible et traçable.

N’utilisez pas define pour une clé API, un jeton, une variable d’environnement ou une valeur différente selon l’environnement d’exécution.