# Valeur calculée de la variable ## Variable avec une valeur par défaut calculée Créons une variable dont la valeur est retournée par la fonction "return_no" : ```yml --- version: '1.0' my_calculated_variable: default: type: jinja jinja: '{{ return_no() }}' ``` Puis créons la fonction "return_no" : ```python def return_no(): return 'no' ``` ## Variable avec une valeur calculée En ajoutant le paramètre "hidden" à "True" dans la variable précédente, l'utilisateur n'aura plus la possibilité de modifié la valeur. La valeur de la variable sera donc systématiquement calculée : ```yml --- version: '1.0' my_calculated_variable: hidden: true default: type: jinja jinja: '{{ return_no() }}' ``` C'est également vrai également si hidden est un calcul et que le résultat du calcul est `true`. ## Variable meneuse ou suiveuse avec valeur calculé Une [variable suiveuse](../family/leadership.md) ne peut pas être calculé automatiquement. Une [variable meneuse](../family/leadership.md) peut être calculé automatiquement. Si la variable n'est pas multiple, il ne faut pas que le calcule retourne une liste. ## Variable dynamique avec une valeur calculée Il est également possible de calculer [une variable d'une famille dynamique](../family/auto.md) à partir d'une variable standard : ```yml --- version: '1.0' suffixes: type: string description: Suffixes of dynamic family multi: true default: - val1 - val2 my_variable: type: string description: My variable default: val dyn_: type: dynamic variable: rougail.suffixes my_calculated_variable_dyn_: type: string description: My calculated variable default: type: variable variable: rougail.my_variable ``` Dans ce cas, les variables dynamiques "rougail.dyn_.my_calculated_variable_dyn_" seront calculés à partir de la valeur de la variable "my_variable". Que cela soit pour la variable "rougail.dynval1.my_calculated_variable_dyn_val1" ou "rougail.dynval2.my_calculated_variable_dyn_val2". Par contre, il n'est pas possible de faire un calcul pour une seule des deux variables issues de la variable dynamique. Si c'est ce que vous cherchez à faire, il faudra prévoir un traitement particulier dans votre fonction. Dans ce cas, il faut explicitement demander le suffix et faire un traitement : ```yml --- version: '1.0' suffixes: type: string description: Suffixes of dynamic family multi: true default: - val1 - val2 my_variable: type: string description: My variable default: val dyn_: type: dynamic variable: rougail.suffixes my_calculated_variable_dyn_: type: string description: My calculated variable default: type: jinja jinja: "{% if suffix == 'val1' %}value{% endif %}" params: suffix: type: suffix ``` ## Variable avec valeur calculée obligatoire Par défaut les variables calculées ne sont pas des variables obligatoires. Dans ce cas un calcul peut retourner "None" ou "", mais surtout un utilisateur peut spécifier une valeur nulle à cette variable. Dans ce cas le calcul ne sera plus réalisé.