Published Jun 13 2021

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 an entire book on this topic π

© 2023 Flavio Copes using Notion to Site

Interested in solopreneurship?