Aller au contenu principal
Version: 1.0.0

Valeurs optionnelles

Optional of T distingue explicitement une valeur présente d'une valeur absente. Une adresse absente, un texte vide et une adresse renseignée ne sont pas le même état métier.

Construire et lire une valeur​

contacts.tb
module examples.contacts

function FirstContact
takes contacts as List of Optional of Text
gives Optional of Text
do
for contact in contacts
if present contact as address
if address != ""
give some(address)
give none(Text)

some(address) construit une valeur présente. none(Text) construit une absence dont le type reste explicite. if present rend address accessible uniquement dans la branche de présence. Il n'autorise pas un accès à une valeur absente.

Le premier give rencontré quitte la fonction. Si la liste ne contient aucune adresse non vide, la fonction retourne une absence, pas un texte inventé.

Représentation JSON​

Valeur ToubaArgument ou résultat JSON
none(Text){"present":false}
some(""){"present":true,"value":""}
some("a@example.test"){"present":true,"value":"a@example.test"}

null, une chaîne seule et un champ requis omis ne remplacent pas cette enveloppe. Le runtime vérifie la présence et le type de la valeur contenue. Un champ déclaré Optional of T conserve donc sa place dans le record JSON ; son absence métier est portée par present: false.

Usages et limites​

Les optionnels se composent avec les listes, records et énumérations. Préférez un test de présence à une valeur sentinelle comme -1 ou "unknown" lorsque le domaine ne donne pas un sens propre à cette valeur.

Il n'y a ni déballage implicite, ni conversion automatique vers Text, ni égalité globale des enveloppes optionnelles. Testez la présence, puis traitez la valeur dans sa branche.

Pour un parcours complet, suivez Classer des tickets typés.