Priorité et associativité des opérateurs Swift (avec exemples)

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

Priorité des opérateurs Swift

La priorité des opérateurs est un ensemble de règles utilisées pour évaluer une expression mathématique donnée. Lorsqu'il y a plusieurs opérateurs utilisés dans une seule expression, chaque partie est évaluée dans un certain ordre appelé priorité d'opérateur. Certains opérateurs ont une priorité plus élevée que d'autres, ce qui affecte la manière dont une expression est évaluée.

Table de priorité des opérateurs

Le tableau ci-dessous répertorie la priorité des opérateurs dans Swift. Plus il apparaît dans le tableau, plus sa priorité est élevée.

Groupes de priorité de la bibliothèque standard Swift (du plus élevé au plus bas)
Groupes d'opérateurs Exemples
Priorité de décalage au niveau du bit >> et <>>>
Priorité de multiplication & *% & * /
Priorité d'ajout | & + & - + - ^
Priorité de la formation de la plage … <…
Priorité de casting est tel que
Préséance de coalescence nulle ??
Priorité de comparaison ! => = <= === ==
Préséance de conjonction logique &&
Priorité de disjonction logique ||
Priorité par défaut ~>
Préséance ternaire ?:
Priorité des flèches de fonction ()
Préséance des affectations | =% = / = & <> = & = * = >> = << = = + = - =

Exemple 1: Priorité de l'opérateur Swift

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

 29

Dans l'exemple ci-dessus, si vous lisez l'expression de gauche à droite, vous pouvez vous attendre à ce que la sortie soit égale à 45. Mais, l'opérateur de multiplication a une priorité plus élevée que l'opérateur d'addition, donc l'expression 4 + 5 * 5 est évaluée comme 4 + (5 * 5). Par conséquent, les print(x)sorties 29 à l'écran.

Étapes d'exécution
Pas Opérateur Expression Valeur renvoyée par l'expression
1 * 5 * 5 25
2 + 4 + 25 29
3 = imprimer (x) 29

Exemple 2: Priorité d'opérateur Swift avec opérateur d'affectation complexe

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

 19

Dans l'exemple ci-dessus, l'expression var y = 15affecte la valeur 15 dans la variable y.

Dans l'expression suivante, y += 10 - 2 * 3l'opérateur de multiplication a une priorité plus élevée que l'opérateur de soustraction et d'affectation composée ( +=).

Par conséquent, l'expression y += 10 - 2 * 3est évaluée comme y = y + (10 - (2 * 3)).

Étapes d'exécution
Pas Opérateur Expression Valeur renvoyée par l'expression
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Associativité des opérateurs Swift

Bien qu'il existe des règles prédéfinies définies par la priorité des opérateurs pour évaluer une expression, vous vous demandez peut-être ce qui se passe s'il existe plusieurs opérateurs du même niveau de priorité. L'associativité des opérateurs définit comment les opérateurs de même priorité sont regroupés.

Dans Swift, les opérateurs peuvent être associatifs à gauche, associatifs à droite ou n'avoir aucune associativité. Les opérateurs associatifs à gauche regroupent leurs opérandes à partir de la gauche de l'instruction, les opérateurs associatifs à droite à droite et les opérateurs sans associativité n'ont pas de comportement défini lorsqu'ils sont utilisés en séquence dans une expression.

Table d'associativité des opérateurs

Le tableau ci-dessous montre l'associativité des opérateurs Swift ainsi que la priorité.

Associativité de la bibliothèque standard Swift (priorité la plus élevée à la plus basse)
Groupes d'opérateurs Exemples Associativité
Priorité de décalage au niveau du bit >> et <>>> aucun
Priorité de multiplication & *% & * / la gauche
Priorité d'ajout | & + & - + - ^ la gauche
Priorité de la formation de la plage … <… aucun
Priorité de casting est tel que aucun
Préséance de coalescence nulle ?? droite
Priorité de comparaison ! => = <= === == aucun
Préséance de conjonction logique && la gauche
Priorité de disjonction logique || la gauche
Priorité par défaut ~> aucun
Préséance ternaire ?: droite
Priorité des flèches de fonction () droite
Préséance des affectations | =% = / = & <> = & = * = >> = << = = droite

Exemple 3: Associativité de l'opérateur Swift

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

 200

Dans le programme ci-dessus, l'expression est évaluée de gauche à droite car les opérateurs appartiennent à des groupes de priorité de multiplication et ont quitté l'associativité. Par conséquent, l'opération de division a lieu plus tôt et vous obtenez le résultat 200 . Et si vous voulez exécuter la multiplication en premier? Vous devez envelopper l' 2 * 10expression entre accolades () comme suit:

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

 2

Vous n'avez pas besoin de mémoriser la précédence et la table associative. La plupart du temps, la préséance et l'associativité des opérateurs ont un sens en soi. Vous pouvez toujours utiliser le tableau comme référence en cas de doute. De plus, il est préférable d'utiliser des parenthèses pour rendre votre code plus facile à comprendre.

Articles intéressants...