Expressions
Les expressions calculent des valeurs à partir de valeurs variables et littérales.
- Opérations arithmétiques
- Opérations relationnelles
- Opérations logiques
- Concaténation
- Longueur
- Priorité
Opérations arithmétiques
Les opérations arithmétiques sont effectuées sur des valeurs numériques. Si une valeur de chaîne est utilisée dans une opération arithmétique, elle est convertie en nombre. En cas d’échec, une erreur est renvoyée.
a+b | ajouter a et b |
a - b | soustraire b de a |
a* b | multipliez a et b |
a/b | diviser a par b |
a % b | modulo = a - math.floor(a/b)*b |
a ^ b | élève a à la puissance b ; b peut être n’importe quel nombre |
-a | annule a |
Opérations relationnelles
Les opérations relationnelles comparent deux valeurs et renvoient la valeur vraie si la relation est satisfaite et la valeur fausse si elle ne l’est pas. Les opérations relationnelles peuvent être effectuées entre des valeurs de tout type. Si les valeurs ne sont pas du même type, false est renvoyé. Les chiffres sont comparés de la manière habituelle. Les chaînes sont comparées à l’aide de la séquence de classement pour les paramètres régionaux actuels.
a = b | a est égal à b |
a ~= b | a n’est pas égal à b |
a < b | a est inférieur à b |
a > b | a est supérieur à b |
a <= b | a est inférieur ou égal à b |
a >= b | a est supérieur ou égal à b |
Opérations logiques
Les opérations logiques sont généralement effectuées sur des valeurs booléennes, mais dans ce langage, elles peuvent être effectuées sur deux valeurs quelconques. nil et false sont considérés comme faux et toute autre valeur est considérée comme vraie. Les opérations logiques utilisent l’évaluation par raccourcis, où si la première valeur détermine le résultat de l’opération, la seconde valeur n’est pas évaluée.
a et b | si a est faux ou nul, renvoie a sinon renvoie b |
a ou b | si a n’est ni faux ni nul, renvoie a sinon renvoie b |
not a | si a n’est pas faux ou nul, renvoie faux, sinon renvoie vrai |
Les opérations et et ou peuvent être utilisées pour l’évaluation conditionnelle dans une expression :
a ou b | peut être utilisé pour fournir une valeur par défaut b si a n’est pas initialisé (nul). Ceci est utile pour les paramètres facultatifs des fonctions. |
a et b ou c | peut être utilisé pour choisir un b ou un c non nul en fonction de la condition a. Si a est vrai, alors a et b renvoient b, et b ou c renvoie b. Si a est faux, alors a et b renvoient faux et faux ou c renvoie c. Cela équivaut à un ? b : c dans le langage de programmation C. |
Concaténation
La concaténation de chaînes est s1.. s2. Cela crée une nouvelle chaîne suffisamment grande pour contenir le contenu de s1 et s2 et copie le contenu dans la nouvelle chaîne. Une erreur se produit si s1 ou s2 ne sont pas des chaînes. Notez que la concaténation répétée peut entraîner une surcharge de copie considérable. Si vous créez une chaîne de n octets en concaténant un octet à la fois, cela copiera n* (n+1) /2 octets. Pour de meilleures performances, vous pouvez mettre des morceaux d’une chaîne à concaténer dans une table (discuté plus loin), puis utiliser la fonction table.concat (). Un exemple de ceci est illustré dans l’exemple COMBINE_HEADERS ().
Longueur
La longueur d’une chaîne s est renvoyée par #s. L’opérateur # est également utilisé avec les tables de tableaux, comme indiqué plus loin.
Priorité
La priorité des opérateurs détermine l’ordre dans lequel les opérations sont effectuées dans une expression, les opérations de priorité supérieure étant effectuées avant celles de priorité inférieure. L’ordre de priorité peut, comme d’habitude, être remplacé par des parenthèses. Par exemple, in a + b \* c
, * a une priorité supérieure à +, de sorte que l’expression est évaluée sous a + (b \* c)
la forme.
highest | |
- | not # - (unary) |
- |
|
- | .. |
- | = ~= < > <= >= |
- | et |
lowest | ou |
Les opérations ayant la même priorité sont effectuées de gauche à droite (associatif gauche), sauf ^ et.. qui sont effectués de droite à gauche (associatif droit). Ainsi, a^b^c est évalué comme a^ (b^c).