Приоритет и ассоциативность определяют, как и в каком порядке термин должен быть разбит на подтермы. Другими словами, он определяет правила, в которых квадратные скобки должны устанавливаться неявно, если не указано явно.
Если у вас есть термин без скобок, вы начинаете с операторов с наименьшим приоритетом и заключаете его в квадратные скобки.
Например:
Precendences:
- .
- !
- *, /
- +, -
- ==
- &&
Термин:
!person.isMarried && person.age == 25 + 2 * 5
будет сгруппировано так:
- ! (Person.isMarried) && (person.age) == 25 + 2 * 5
- (! (Person.isMarried)) && (person.age) == 25 + 2 * 5
- (! (Person.isMarried)) && (person.age) == 25 + (2 * 5)
- (! (Person.isMarried)) && (person.age) == (25 + (2 * 5))
- (! (Person.isMarried)) && ((person.age) == (25 + (2 * 5)))
- ((! (Person.isMarried)) && ((person.age) == (25 + (2 * 5))))
Одним из очень распространенных правил является приоритет * и / перед + и -.
Ассоциативность указывает, в каком направлении сгруппированы операторы одного и того же приоритета. Большинство операторов слева направо. Унарные префиксные операторы справа налево.
Пример: * * тысяча сорок шесть
1 + 2 + 3 + 4
сгруппировано так:
- (1 + 2) + 3 + 4
- ((1 + 2) + 3) + 4
- (((1 + 2) + 3) + 4)
, а
!! + 1
сгруппирован как
- !! (+ 1)
- ! (! (+ 1))
- (! (! (+ 1)))
Пока все соответствует правилам BODMAS / PEDMAS, с какими различиями вы столкнулись?