Swift Operators Precedence and Associativity
React Masterclass
Launching on November 4th
This tutorial belongs to the Swift series
Think about this expression:
let amount = 1 + 2 * 3
The value of amount could drastically change depending if 1 + 2 is calculated before 2 * 3.
The order of calculation is determined by the operator precedence. From higher precedence to lower precedence, as for the most popular operators we have:
- Multiplication (
*), division (/), remainder (%) - Add (
+), subtract (-) - Comparisons (
==,!=,<,>,<=,>=) - Logical AND (
&&) and OR (||) - Ternary conditional (
?:) - Assignment and compound assignment operators (
=,+=and so on)
This means that the above expression is resolved first calculating the multiplication, and then the sum:
let amount = 1 + 2 * 3 // = 7
The full table of precedence, more complicated, is available at https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations.
When inside an expression you have multiple operators with the same precedence, we make use of the operator associativity. Associativity is a property we use to determine which operation has priority when the precedence is the same.
For example, consider this:
let amount = 4 / 2 * 5
Depending if we first execute 4 / 2 or 2 * 5, the result could be 10 or 0,4.
Associativity solves this. Multiplication is left associative, so we must first execute the expression on the left. Parentheses help us figure this out:
let amount = (4 / 2) * 5
Multiplication (*), division (/), remainder (%), add (+), subtract (-), logical AND (&&), logical OR (||) are left associative
Assignment and compound assignment operators (=, += and so on) and the ternary conditional (?:) are right associative
Comparisons (==, !=, <, >, <=, >=) don’t have associativity.
I wrote 20 books to help you become a better developer:
- JavaScript Handbook
- TypeScript Handbook
- CSS Handbook
- Node.js Handbook
- Astro Handbook
- HTML Handbook
- Next.js Pages Router Handbook
- Alpine.js Handbook
- HTMX Handbook
- React Handbook
- SQL Handbook
- Git Cheat Sheet
- Laravel Handbook
- Express Handbook
- Swift Handbook
- Go Handbook
- PHP Handbook
- Python Handbook
- Linux/Mac CLI Commands Handbook
- C Handbook