# Les variables à choix
## Une variable à choix
Il est possible d'imposer une liste de valeur pour une variable particulière :
```xml
val1
val2
val3
```
En YAML :
```yml
- variable:
name: my_variable
type: choice
choice:
- text: val1
- text: val2
- text: val3
```
Dans ce cas, seules les valeurs proposées sont possibles pour cette variable.
Cette variable n'est pas obligatoire dont il est possible de mettre la valeur "None".
Si la variable est obligatoire ou si une valeur est précisée (la variable passe obligatoire) alors la valeur "None" n'est plus autorisé :
```xml
val1
val2
val3
val1
```
En YAML :
```yml
- variable:
name: my_variable
type: choice
choice:
- text: val1
- text: val2
- text: val3
value:
- text: val1
```
## Un variable à choix typée
Par défaut les choix sont de type "string". Il est possible de préciser des nombres, des booléens ou la valeur None :
```xml
val1
val2
3
True
```
En YAML :
```yml
- variable:
name: my_variable
type: choice
choice:
- text: val1
- type: string
text: val2
- type: number
text: 3
- type: boolean
text: true
- type: 'nil'
```
Comme vu précédement ajouter la valeur None n'est pas utile parce qu'elle est automatiquement ajouté si la variable n'est pas obligatoire.
## Ajouter une option à une variable à choix existante
Pour ajouter un choix à une variable à choix existante, rien de plus simple, juste redéfinir la variable en ajoutant le choix voulu :
```xml
val4
```
En YAML :
```yml
- variable:
name: my_variable
redefine: true
choice:
- text: val4
```
## Redéfinir une option à choix
Si on veut supprimer un choix ou redéfinir complètement la liste, il faut redéfinir cette variable et ajouter l'attribut "remove_choice" à "True" :
```xml
val1
val2
```
En YAML :
```yml
- variable:
name: my_variable
redefine: true
remove_choice: true
choice:
- text: val1
- text: val2
```
Dans ce cas toutes les anciens choix ne seront plus possible. Seuls les nouveaux le seront.
## Un variable à choix provenant d'une variable
Une variable à valeur multiple peut servir de source des choix :
```xml
other_variable
```
En YAML :
```yml
- variable:
name: my_variable
type: choice
choice:
- type: variable
text: other_variable
```
Dans ce cas, toutes les valeurs de la variable seront des choix utilisables par l'utilisateur.
Seul un choice de type "variable" est possible par variable.
## Un variable à choix provenant d'une fonction
```xml
0
10
9
```
En YAML :
```yml
- variable:
name: my_variable
type: choice
choice:
- type: function
name: range
param:
- type: number
text: 0
- type: number
text: 10
value:
- type: number
text: 9
```