Published on

Swiftda Operator Precedence va Associativity

Authors

Operatorlar orasida qaysi biri birinchi bajarilishini aniqlaydigan qoidalar operator precedence (operatorlar ustuvorligi) deb ataladi.

Operator precedence haqida o‘rganishdan oldin Swift operatorlari bilan tanish bo‘lganingiz ma’qul.

Operator Precedence nima?

Agar bir ifoda ichida bir nechta operatorlar bo‘lsa, qaysi operator birinchi bajarilishi precedence orqali belgilanadi.

Misol:

var num = 8 + 5 * 4 // 28

Agar:

  • + birinchi bajarilsa → natija 52 bo‘ladi
  • * birinchi bajarilsa → natija 28 bo‘ladi

Swiftda * operatori + dan ustun, shuning uchun ko‘paytirish birinchi bajariladi.

Operator Precedence tartibi (yuqoridan pastga)

Quyidagi ro‘yxatda ustuvorlik eng yuqoridan eng pastga qarab berilgan:

  1. Bitwise Shift>>, <<
  2. Multiplicative*, /, %
  3. Additive+, -, |, ^
  4. Range Operatorlari..<, ...
  5. Castingis, as
  6. Nil-Coalescing??
  7. Comparison==, !=, <, >, <=, >=, ===
  8. Logical AND&&
  9. Logical OR||
  10. Ternary Operator? :
  11. Assignment Operatorlari+=, -=, *=, /=, %=, |=, ^=, >>=, <<=

Misol:

var num = 15

num += 10 - 2 * 3
print(num)

Natija:

19

Tahlil:

  • Ustuvorlik tartibi: *-+=
  • Shuning uchun ifoda quyidagicha bajariladi:
num += 10 - (2 * 3)

Operator Associativity

Agar bir ifoda ichida bir xil ustuvorlikka ega ikkita operator bo‘lsa, ular qaysi tomondan bajarilishi associativity orqali belgilanadi.

Misol:

print(6 * 4 / 3)   // 8

* va / bir xil precedence ga ega. Ularning associativity si chapdan o‘nga (left to right).

Shuning uchun:

(6 * 4) / 324 / 3 = 8

Agar bo‘lishni birinchi bajarmoqchi bo‘lsak:

print(6 * (4 / 3))

Associativity turlari

  • Left Associativity — chapdan o‘ngga bajariladi
  • Right Associativity — o‘ngdan chapga bajariladi
  • Non-associative — belgilangan tartib yo‘q, ko‘pincha qavs kerak bo‘ladi

Operator Associativity tartibi

Quyida operatorlarning associativity yo‘nalishlari keltirilgan:

  • Bitwise Shift (>>, <<)hech biri (none)
  • Multiplicative (*, /, %)chapdan o‘nga (left)
  • Additive (+, -, |, ^)chapdan o‘nga (left)
  • Range (..<, ...)none
  • Casting (is, as)none
  • Nil-Coalescing (??)o‘ngdan chapga (right)
  • Comparison (==, !=, <, >, <=, >=, ===)none
  • Logical AND (&&)left
  • Logical OR (||)left
  • Ternary (? :)right
  • Assignment (+=, -=, *=, /=, %= va boshqalar)right

Yana bir misol

print(6 * 4 / 3)

Bu yerda * va / bir xil precedence ga ega, va ular chapdan o‘nga bajariladi.

Shuning uchun 6 * 4 birinchi bajariladi.