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

Основы Swift

Операторы Swift

Контроль потока Swift

Коллекции Swift

Функции Swift

Swift Введение

Приоритет и ассоциативность операторов Swift

В этой статье вы узнаете правила вычисления выражений с операторами и операндами.

Приоритет операторов Swift

Приоритет операторов - это набор правил, используемых для вычисления данных математических выражений. При использовании нескольких операторов в одном выражении каждый элемент вычисляется в определенном порядке, называемом приоритетом операторов. Некоторые операторы имеют более высокий приоритет, чем другие, что влияет на способ вычисления выражения.

Таблица приоритетов операторов

В таблице приведены приоритеты операторов в Swiftoperatorприоритет. Чем выше он показан в таблице, тем выше приоритет.

Группы приоритета стандартной библиотеки Swift (от высшего к низшему)
группы операторовПример
Изменение приоритета>> &<< &>> >>
преимущественная приоритетность умножения&* % & * /
преимущественная приоритетность сложения| &+ &- + – ^
преимущественная приоритетность создания диапазона..< …
преимущественная приоритетность типа преобразованияis as
преимущественная приоритетность空的concatenation??
преимущественная приоритетность сравнения!= > < >= <= === ==
преимущественная приоритетность логической ассоциативности&&
преимущественная приоритетность логического вычитания||
Default приоритет~>
Приоритет三元 оператора?:
Приоритет стрелочных функций( )
Приоритет присваивания|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

пример 1: приоритетность операторов Swift

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

Когда вы запустите aforementioned программу, вывод будет:

29

в данном примере, если читать выражение слева направо, то можно ожидать вывода 45. Однако, приоритет операции умножения выше, чем у операции сложения, поэтому выражение 4 + 5 * 5 evaluates to 4 + (5 * 5). Поэтому на экране выводится (x) 29.

execute step
step
operatorexpressionworth returned by the expression
1*5 * 525
2+4 + 2529
3=print(x)29

пример 2: приоритетность операторов Swift с сложными операторами присваивания

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

Когда вы запустите aforementioned программу, вывод будет:

19

в данном примере выражение var y = 15assigns the value 15 to the variable y.

в следующем выражении y + = 10-2 * 3 приоритет операции умножения выше, чем у сложения с оператором сложения (+ =).

therefore, the expression y + = 10-2 * 3 is calculated as y = y + (10-(2 * 3)).

execute step
stepoperatorexpressionworth returned by the expression
1=var y = 1515
2*2 * 36
3--10-64
4+ =15 + 419

ассоциативность операторов Swift

хотя существует предварительно определенный набор правил, определяющих приоритетность операторов для оценки выражений, вы можете想知道, что会发生, если несколько операторов имеют одинаковый приоритет. Ассоциативность операторов определяет, как комбинировать операторы с одинаковой приоритетностью.

в Swift операторы могут быть левые, правые или не связанные. При использовании в выражении в порядке, левые операторы, операнды группируются с левой стороны предложения, правые операторы и не связанные операторы не имеют определенного поведения.

таблица ассоциативности операторов

в таблице ниже показана ассоциативность операторов Swift и их приоритетность.

ассоциативность стандартной библиотеки Swift (преимущественная приоритетность от высокого к низкому)
группы операторовПримерассоциативность
преимущественная приоритетность сдвига>>&<<&>> >>Нет
преимущественная приоритетность умножения&*%&* /слева направо
преимущественная приоритетность сложения| &+&-+-^слева направо

преимущественная приоритетность создания диапазона

.. <...Нет
преимущественная приоритетность типа преобразованияis a
Нет
преимущественная приоритетность空的concatenation??Правая ассоциативность
преимущественная приоритетность сравнения!=> <> = <= === ==Нет

преимущественная приоритетность логического И

&&слева направо
преимущественная приоритетность логического вычитания||слева направо
Default приоритет~>Нет
Приоритет三元 оператора?:Правая ассоциативность
Приоритет стрелочных функций()Правая ассоциативность
Приоритет присваивания| =%= / =&<< =&>> =&= * = >> = << = ^ =Правая ассоциативность

Пример 3: Ассоциативность операторов Swift

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

Когда вы запустите aforementioned программу, вывод будет:

200

В aforementioned программе выражение вычисляется слева направо, потому что операторы относятся к группе умножения и имеют левую ассоциативность. Поэтому деление выполняется заранее, результат составляет 200. Если вы хотите сначала выполнить умножение, что нужно сделать? Необходимо обернуть выражение 2 * 10 в скобки (), как показано ниже:

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

Когда вы запустите aforementioned программу, вывод будет:

2

Вам не нужно запоминать таблицу приоритетов и ассоциативности. В большинстве случаев, приоритет и ассоциативность операторов сами по себе очень значимы. Если у вас есть вопросы, вы можете в любое время использовать эту таблицу в качестве справочника. Кроме того, лучше всего использовать скобки, чтобы сделать код более понятным.