- Published on
Swiftda Operator Precedence va Associativity
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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:
- Bitwise Shift →
>>,<< - Multiplicative →
*,/,% - Additive →
+,-,|,^ - Range Operatorlari →
..<,... - Casting →
is,as - Nil-Coalescing →
?? - Comparison →
==,!=,<,>,<=,>=,=== - Logical AND →
&& - Logical OR →
|| - Ternary Operator →
? : - 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) / 3 → 24 / 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.