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:

Swift
Operator precedence misoli
var num = 8 + 5 * 4 print(num) // 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. Casting β†’ is, as
  6. Nil-Coalescing β†’ ??
  7. Comparison β†’ ==, !=, <, >, <=, >=, ===
  8. Logical AND β†’ &&
  9. Logical OR β†’ ||
  10. Ternary Operator β†’ ? :
  11. Assignment Operatorlari β†’ +=, -=, *=, /=, %=, |=, ^=, >>=, <<=

Misol:

Swift
Precedence tartibi
var num = 15 num += 10 - 2 * 3 print(num)

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:

Swift
Associativity misoli
print(6 * 4 / 3) // 8

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

Shuning uchun:

(6 * 4) / 3  β†’ 24 / 3 = 8

Agar bo'lishni birinchi bajarmoqchi bo'lsak:

Swift
Qavs bilan tartibni o'zgartirish
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

Swift
Associativity - oxirgi 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.


πŸ“š Masalalarni qanday yechish kerak?

βœ… Namuna: 1-masala yechimi

Masala: a + b * c ifodasi natijasini qaytaring (precedence qoidalariga amal qilib).

Bosqichma-bosqich yechim:

1-qadam: Masalani tushunish

Bizga a, b, c sonlari beriladi. a + b * c ifodani hisoblashimiz kerak.

Muhim: Precedence qoidasiga ko'ra * operatori + dan ustun, shuning uchun:

  • Avval b * c hisoblanadi
  • Keyin natijaga a qo'shiladi

2-qadam: Starter kodni ko'rish

func solve(_ a: Int, _ b: Int, _ c: Int) -> Int {
    // a + b * c ni hisoblang
    // Precedence: * birinchi, + keyin
    return 0
}

3-qadam: Yechimni yozish

Swift avtomatik precedence qoidalariga amal qiladi:

Swift
1-masala yechimi
func solve(_ a: Int, _ b: Int, _ c: Int) -> Int { return a + b * c } // Tekshirish print(solve(2, 3, 4)) // 2 + 3*4 = 2 + 12 = 14 print(solve(5, 2, 3)) // 5 + 2*3 = 5 + 6 = 11 print(solve(10, 0, 5)) // 10 + 0*5 = 10 + 0 = 10

Natija: Barcha testlar o'tadi βœ…

Izoh:

  • Swift avtomatik * ni birinchi bajaradi
  • Siz qavs qo'ymasangiz ham to'g'ri ishlaydi
  • a + b * c = a + (b * c) β€” bir xil natija

Eslatma: Agar + ni birinchi bajarmoqchi bo'lsangiz, qavs ishlating: (a + b) * c


Xulosa

  • Precedence β€” qaysi operator birinchi bajariladi
  • Associativity β€” bir xil precedence da qaysi tomonda birinchi
  • *, /, % β€” ustunroq (multiplicative)
  • +, - β€” pastroq (additive)
  • Qavslar precedence ni o'zgartiradi

Keyingi mavzuda Ternary Conditional Operator ni o'rganamiz.

Buy mea coffee