English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете правила вычисления выражений с операторами и операндами.
Приоритет операторов - это набор правил, используемых для вычисления данных математических выражений. При использовании нескольких операторов в одном выражении каждый элемент вычисляется в определенном порядке, называемом приоритетом операторов. Некоторые операторы имеют более высокий приоритет, чем другие, что влияет на способ вычисления выражения.
В таблице приведены приоритеты операторов в Swiftoperatorприоритет. Чем выше он показан в таблице, тем выше приоритет.
группы операторов | Пример |
Изменение приоритета | >> &<< &>> >> |
преимущественная приоритетность умножения | &* % & * / |
преимущественная приоритетность сложения | | &+ &- + – ^ |
преимущественная приоритетность создания диапазона | ..< … |
преимущественная приоритетность типа преобразования | is as |
преимущественная приоритетность空的concatenation | ?? |
преимущественная приоритетность сравнения | != > < >= <= === == |
преимущественная приоритетность логической ассоциативности | && |
преимущественная приоритетность логического вычитания | || |
Default приоритет | ~> |
Приоритет三元 оператора | ?: |
Приоритет стрелочных функций | ( ) |
Приоритет присваивания | |= %= /= &<<= &>>= &= *= >>= <<= ^= += -= |
let x = 4 + 5 * 5 print(x)
Когда вы запустите aforementioned программу, вывод будет:
29
в данном примере, если читать выражение слева направо, то можно ожидать вывода 45. Однако, приоритет операции умножения выше, чем у операции сложения, поэтому выражение 4 + 5 * 5 evaluates to 4 + (5 * 5). Поэтому на экране выводится (x) 29.
step | operator | expression | worth returned by the expression |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | print(x) | 29 |
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)).
step | operator | expression | worth returned by the expression |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | -- | 10-6 | 4 |
4 | + = | 15 + 4 | 19 |
хотя существует предварительно определенный набор правил, определяющих приоритетность операторов для оценки выражений, вы можете想知道, что会发生, если несколько операторов имеют одинаковый приоритет. Ассоциативность операторов определяет, как комбинировать операторы с одинаковой приоритетностью.
в Swift операторы могут быть левые, правые или не связанные. При использовании в выражении в порядке, левые операторы, операнды группируются с левой стороны предложения, правые операторы и не связанные операторы не имеют определенного поведения.
в таблице ниже показана ассоциативность операторов Swift и их приоритетность.
группы операторов | Пример | ассоциативность |
---|---|---|
преимущественная приоритетность сдвига | >>&<<&>> >> | Нет |
преимущественная приоритетность умножения | &*%&* / | слева направо |
преимущественная приоритетность сложения | | &+&-+-^ | слева направо |
преимущественная приоритетность создания диапазона | .. <... | Нет |
преимущественная приоритетность типа преобразования | is a | Нет |
преимущественная приоритетность空的concatenation | ?? | Правая ассоциативность |
преимущественная приоритетность сравнения | !=> <> = <= === == | Нет |
преимущественная приоритетность логического И | && | слева направо |
преимущественная приоритетность логического вычитания | || | слева направо |
Default приоритет | ~> | Нет |
Приоритет三元 оператора | ?: | Правая ассоциативность |
Приоритет стрелочных функций | () | Правая ассоциативность |
Приоритет присваивания | | =%= / =&<< =&>> =&= * = >> = << = ^ = | Правая ассоциативность |
let x = 40 / 2 * 10 print(x)
Когда вы запустите aforementioned программу, вывод будет:
200
В aforementioned программе выражение вычисляется слева направо, потому что операторы относятся к группе умножения и имеют левую ассоциативность. Поэтому деление выполняется заранее, результат составляет 200. Если вы хотите сначала выполнить умножение, что нужно сделать? Необходимо обернуть выражение 2 * 10 в скобки (), как показано ниже:
let x = 40 / (2 * 10) print(x)
Когда вы запустите aforementioned программу, вывод будет:
2
Вам не нужно запоминать таблицу приоритетов и ассоциативности. В большинстве случаев, приоритет и ассоциативность операторов сами по себе очень значимы. Если у вас есть вопросы, вы можете в любое время использовать эту таблицу в качестве справочника. Кроме того, лучше всего использовать скобки, чтобы сделать код более понятным.