Qu'est-ce que l'associativité (pour un opérateur) et pourquoi est-ce important?
Mise à jour: associativité des opérateurs
Pour les opérateurs, l'associativité signifie que lorsque le même opérateur apparaît dans une rangée, alors quelle occurrence d'opérateur nous appliquons en premier. Dans ce qui suit, laissez Q
être l'opérateur
a Q b Q c
Si Q
est laissé associatif, il est évalué comme
(a Q b) Q c
Et s'il est bien associatif, il évalue comme
a Q (b Q c)
C'est important, car cela change le sens d'une expression. Considérons l'opérateur de division avec l'arithmétique entière, qui reste associative
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
S'il était associatif à droite, il serait évalué à une expression indéfinie, car vous diviseriez par zéro
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
Il existe trois types d'associativité:
La propriété associative en mathématiques
Ordre des opérations dans les langages de programmation
Associativité dans les caches CPU.
La propriété associative en mathématiques est une propriété d'opérateurs tels que l'addition (+). Cette propriété vous permet de réorganiser les parenthèses sans modifier la valeur d'une instruction, à savoir:
(a + b) + c = a + (b + c)
Dans les langages de programmation, l'associativité (ou fixité) d'un opérateur est une propriété qui détermine comment les opérateurs de même priorité sont regroupés en absence de parenthèses; c'est-à-dire dans quel ordre chaque opérateur est évalué. Cela peut différer entre les langages de programmation.
Dans les caches CPU, l'associativité est une méthode d'optimisation des performances.
c'est l'ordre d'évaluation pour les opérateurs de même priorité. L'ordre de gauche à droite ou de droit à gauche est important. Pour
3 - 2 - 1
si c'est de GAUCHE à DROITE, alors c'est
(3 - 2) - 1
et est 0. S'il est DROIT à GAUCHE, alors il est
3 - (2 - 1)
et il est de 2. Dans la plupart des langues, nous disons que l'opérateur moins a une associativité de GAUCHE À DROITE.
Si vous faites référence à "l'associativité des opérateurs" - c'est ainsi qu'un langage détermine comment les opérateurs de même priorité sont regroupés en l'absence de parenthèses.
Par exemple, les opérateurs + et - dans les langages basés sur C ont la même priorité. Lorsque vous écrivez une expression qui utilise les deux (sans parenthèses), le compilateur doit déterminer dans quel ordre les évaluer.
Si vous écrivez 12 - 5 + 3, les évaluations possibles incluent:
Selon l'ordre dans lequel vous évaluez l'expression, vous pouvez obtenir des résultats différents. Dans les langages basés sur C, + et - ont quitté l'associativité, ce qui signifie que l'expression ci-dessus serait évaluée comme le premier cas.
Tous les langages ont des règles fortement définies pour la priorité et l'associativité. Vous pouvez en savoir plus sur les règles pour C # ici. Les concepts généraux d'associativité des opérateurs et priorité sont bien couverts sur wikipedia.
Simple !!
Left Associative signifie que nous évaluons notre expression de gauche à droite
Right Associative signifie que nous évaluons notre expression de droite à gauche
Nous savons que *,/et% ont la même priorité, mais selon l'associativité, la réponse peut changer:
Par exemple: Nous avons l'expression: 4 * 8/2% 5
Gauche associative: (4 * 8)/2% 5 ==> (32/2)% 5 ==> 16% 5 ==> 1
Droite associative: 4 * 8/(2% 5) ==> 4 * (8/0) ==> Comportement indéfini
J'espère que cela vous aidera.
Je suppose que vous voulez dire l'associativité des opérateurs ...
C'est l'ordre de liaison des opérandes à un opérateur. Fondamentalement:
a - b + c
peut être évalué comme (en supposant - et + ont la même priorité):
((a - b) + c) ou,
(a - (b + c))
Si les opérateurs sont associatifs à gauche (se lient immédiatement à l'opérande de gauche), il sera évalué comme le premier. S'ils sont bien associatifs, il sera évalué comme le second.
Si vous voulez dire l'associativité des opérateurs:
Il définit la façon dont les expressions sont analysées. Il donne un standard, donc chaque expression est analysée de la même manière.
C'est surtout important pour les opérations qui ont le même précédent, quand il pourrait y avoir des effets secondaires.
La plupart des exemples précédents ont utilisé des constantes. Si les arguments se trouvent être des appels de fonction, l'ordre dans lequel les appels sont effectués peut être déterminé par les règles d'association, en fonction bien sûr de votre compilateur. Et si ces fonctions ont des effets secondaires ..
Nous savons tous que la préséance est importante, tout comme l'associativité dans l'interprétation du sens d'une expression. Pour une introduction vraiment simple, essayez Power of Operators .