Une expression est la plus petite unité de code qui a un résultat lorsqu'elle est évaluée. Dans Verse, tout est une expression, ce qui signifie que tout est rapporté à une [valeur] (verse-glossary#value).
Par exemple, l'expression 'if ... else' est rapportée dans Verse à une valeur qui dépend du contenu de
l'expression [blocs] (verse-glossary#code-block). Le code suivant donne une valeur de chaîne contenant soit “Big!” ou “Small!” selon que MyNumber
est supérieur à 5 ou non :
if (MyNumber > 5):
“Big!”
else
“Small!”
Cela signifie que vous pouvez utiliser un if ... else
directement en entrée des fonctions au lieu de stocker un résultat et d'utiliser ce résultat en entrée.
Cet exemple est simple, mais le mécanisme fonctionne dans des contextes plus complexes. Par exemple, les boucles produisent des matrices de valeurs, ce qui vous permet de créer rapidement de nouvelles matrices à partir des matrices existantes.
Dans le code suivant, MyArray
contiendra toutes les valeurs de NumberArray
inférieures à 5.
MyArray : []int = for(Number := NumberArray, Number < 5):
Number
Expressions faillibles
Une expression faillible est une expression qui peut réussir et produire une valeur, ou échouer et ne renvoyer aucune valeur. Les expressions faillibles ne peuvent être exécutées que dans un [contexte d'échec] (verse-glossary#failure-context), car ce contexte définit ce qui se passe en cas d'échec de l'expression.
Parmi les exemples d'expressions faillibles, citons l'indexation dans une matrice, car un index invalide entraînera un échec, et l'utilisation d'opérateurs, comme la comparaison de deux valeurs. Pour plus d'informations sur les expressions faillibles dans Verse, voir échec.
Liste d'expressions dans Verse
Le tableau suivant décrit les différents types d'expressions dans Verse. Suivez les liens pour en savoir plus sur chaque expression.
Expression | Description | L'expression est-elle faillible ? | |
---|---|---|---|
Littéraux | Un [littéral] (verse-glossary#literal) est une valeur fixe dans votre code, comme un nombre ou un caractère. Dans Verse, il existe des littéraux pour les [types] suivants (verse-glossary#type) :
|
||
Appels de fonction | Un appel de fonction est une expression et peut avoir deux formes : FunctionName() et FunctionName[] . Le type de résultat de l'expression d'appel de fonction est défini dans la signature de la fonction. Pour plus de détails, reportez-vous à la section Fonctions. |
Seulement lorsque l'appel de fonction a la forme FunctionName[] , et que la définition de la fonction a le spécificateur <decides> . |
|
Comparaison | Une expression de comparaison compare deux choses en utilisant l'un des opérateurs de comparaison :
Pour plus de détails, reportez-vous à la section [Opérateurs] (operators-in-verse). |
Oui | |
Affectation | Une expression d'affectation stocke une valeur à un emplacement mutable, par exemple lors de l'initialisation d'une constante ou du changement de valeur d'une variable. Reportez-vous à Variables et constantes pour plus de détails. | ||
Mathématique | Une expression mathématique effectue des calculs à l'aide des opérateurs :
Tous ces opérateurs ont également des variantes d'assignation qui peuvent être utilisées avec des pointeurs. Pour plus de détails, reportez-vous à la section [Opérateurs] (operators-in-verse). |
Uniquement pour la division de nombres entiers. | |
Décision | Une expression de décision utilise les opérateurs not , and et or pour vous permettre de contrôler le flux de décision de réussite et d'échec. Pour plus de détails, reportez-vous à la section [Opérateurs] (operators-in-verse). |
Oui | |
Requête | Une expression de requête utilise l'opérateur ? et vérifie si une valeur logique ou d'option est true . Sinon, l'expression échoue. Pour plus de détails, reportez-vous à la section [Opérateurs] (operators-in-verse). |
Oui | |
Instanciation de classe et de structure | La création d'une instance de class ou de struct est une expression. Reportez-vous à Classe et Struct. |
||
Flux de contrôle | Le flux de contrôle est l'ordre dans lequel un ordinateur exécute les instructions. Vous pouvez utiliser des expressions telles que
Reportez-vous au flux de contrôle pour plus de détails. |
||
Matrice | Une matrice est un [conteneur] (verse-glossary#container) dans lequel vous pouvez stocker des éléments de même type. Les éléments d'une matrice se trouvent dans l'ordre où vous les insérez dans cette matrice, et vous pouvez accéder aux éléments par leur position dans la matrice, appelée leur [index] (verse-glossary#index). Pour plus d'informations, voir matrice. | Seulement lors de l'indexation dans une matrice. | |
Tuple | Un tuple est un conteneur dans lequel vous pouvez stocker des éléments d'un ou plusieurs types. Les éléments d'un tuple sont dans l'ordre où vous les insérez dans ce tuple, et vous pouvez accéder aux éléments par leur position dans le tuple, appelée leur index. Pour en savoir plus, consultez la rubrique Tuple. | ||
Carte | Une carte est un conteneur dans lequel vous pouvez stocker des valeurs associées à une autre valeur, appelées [paires clé-valeur] (verse-glossary#key-value-pair). Les paires clé-valeur peuvent être n'importe quelle combinaison de types, tant que le type de clé est comparable. Les éléments d'un mappage se trouvent dans l'ordre dans lequel vous y insérez les paires clé-valeur, et vous pouvez accéder aux éléments par leurs clés uniques. Pour en savoir plus, consultez la rubrique Map | ||
Option | Une option est un conteneur qui peut avoir une ou aucune valeur d'un type. Pour en savoir plus, consultez la rubrique Option. | ||
Plage | Les expressions de plage contiennent tous les nombres compris entre deux valeurs, ces deux valeurs comprises et séparées par .. , par exemple 1..5 . Les expressions de plage ne peuvent être utilisées qu'à certains endroits, comme dans les expressions for . Reportez-vous à la section Plage. |