English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift Operator Precedence and Associativity

Dans cet article, vous découvrirez les règles utilisées pour calculer les expressions avec des opérateurs et des opérandes.

Priorité des opérateurs Swift

Les priorités des opérateurs sont un ensemble de règles utilisées pour calculer une expression mathématique donnée. Lorsque plusieurs opérateurs sont utilisés dans une seule expression, chaque partie est calculée suivant un ordre spécifique appelé priorité des opérateurs. Certains opérateurs ont une priorité supérieure à d'autres, ce qui affecte la manière dont l'expression est calculée.

Tableau des priorités des opérateurs

Les opérateurs suivants sont répertoriés dans Swiftopérateursa priorité. Plus elle est élevée dans le tableau, plus sa priorité est élevée.

groupe de priorité de la bibliothèque standard Swift (de priorité élevée à faible)
groupe d'opérateursExample
priorité de modification de bit>> &<< &>> >>
priorité de l'opérateur de multiplication&* % & * /
priorité de l'addition| &+ &- + –  ^
priorité de la formation de portée..< …
priorité de la conversion de typeest comme
priorité de l'opérateur de concordance vide??
degré de priorité comparatif!= > < >= <= === ===
priorité de l'association logique&&
Logical Disjunction Precedence||
Default Precedence~>
Ternary Operator Precedence?:
Arrow Function Precedence( )
Assignment Precedence|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

Example1:priorité des opérateurs Swift

let x = 4 + 5 * 5
print(x)

When you run the above program, the output will be:

29

Dans l'exemple précédent, si l'expression est lue de gauche à droite, on pourrait s'attendre à ce que la sortie soit45。Mais, l'opérateur de multiplication a une priorité supérieure à l'opérateur d'addition, donc l'expression4 + 5 * 5est calculé comme4 + (5 * 5)。Par conséquent, le résultat affiché à l'écran est29。

étape d'exécution
étape
opérateurexpressionvaleur retournée par l'expression
1*5 * 525
2+4 + 2529
3=print(x)29

Example2:priorité des opérateurs Swift avec des opérateurs d'affectation complexes

var y = 15
y += 10 - 2 * 3
print(y)

When you run the above program, the output will be:

19

Dans l'exemple précédent, l'expression de la variable y est var y = 15affecté à15。

dans la prochaine expression y + = 10-2 * 3dans laquelle l'opérateur de multiplication a une priorité supérieure à l'opérateur de déduction composé d'affectation+ =)。

par conséquent, l'expression y + = 10-2 * 3 est calculé comme y = y + (10-(2 * 3))。

étape d'exécution
étapeopérateurexpressionvaleur retournée par l'expression
1=var y = 1515
2*2 * 36
3--10-64
4+ =15 + 419

Associativité des opérateurs Swift

Bien que des règles prédéfinies définies par la priorité des opérateurs soient utilisées pour évaluer les expressions, vous pourriez vous demander ce qui se passe si plusieurs opérateurs de même priorité existent. L'associativité des opérateurs définit comment les opérateurs de même priorité sont combinés.

En Swift, les opérateurs peuvent être gauchiers, droitiers ou sans association. Lorsqu'ils sont utilisés en séquence dans une expression, les opérateurs gauchiers regroupent les opérandes du côté gauche de l'expression, les opérateurs droitiers et les opérateurs sans association n'ont pas de comportement défini.

Tableau des associations d'opérateurs

Le tableau suivant montre l'associativité et la priorité des opérateurs Swift.

association de la bibliothèque standard Swift (de priorité élevée à faible)
groupe d'opérateursExampleassociativité
priorité du déplacement de bit>>&<<&>> >>
priorité de l'opérateur de multiplication&*%&* /Left Associativity
priorité de l'addition| &+&-+-^Left Associativity

priorité de la formation de portée

.. <...
priorité de la conversion de typeest un
priorité de l'opérateur de concordance vide??Right Associativity
degré de priorité comparatif!=> <> = <= === ===

Logical Conjunction Precedence

&&Left Associativity
Logical Disjunction Precedence||Left Associativity
Default Precedence~>
Ternary Operator Precedence?:Right Associativity
Arrow Function Precedence()Right Associativity
Assignment Precedence| =%= / =&<< =&>> =&= * = >> = << = ^ =Right Associativity

Example3:Swift Operator Associativity

let x =  40  / 2 * 10
print(x)

When you run the above program, the output will be:

200

In the above program, the expression is calculated from left to right because the operators belong to the multiplication precedence group and have left associativity. Therefore, the division operation is executed early, and the result is200. If you want to perform the multiplication operation first, what should you do? You need to put2 * 10Expressions wrapped in curly braces {}, as shown below:

let x =  40  / (2 * 10)
print(x)

When you run the above program, the output will be:

2

You do not need to remember the precedence and associativity table. In most cases, the precedence and associativity of operators are quite meaningful in themselves. If you have any doubts, you can always use this table as a reference. In addition, it is best to use parentheses to make the code easier to understand.