Šajā rakstā jūs uzzināsiet par noteikumiem, kas izmantoti, lai novērtētu izteicienu ar operatoriem un operandiem.
Ātra operatora prioritāte
Operatora prioritāte ir noteikumu kopums, ko izmanto, lai novērtētu doto matemātisko izteiksmi. Ja vienā izteiksmē tiek izmantoti vairāki operatori, katra daļa tiek novērtēta noteiktā secībā, ko sauc par operatora prioritāti. Dažiem operatoriem ir augstāka prioritāte nekā citiem, kas ietekmē izteiksmes novērtēšanu.
Operatora prioritātes tabula
Zemāk esošajā tabulā ir uzskaitīti Swift operatoru prioritāte. Jo augstāk tas parādās tabulā, jo augstāka ir tā prioritāte.
Ātra standarta bibliotēkas prioritātes grupa (no augstākās līdz zemākajai)Operatoru grupas | Piemēri |
---|---|
Bitu kustības prioritāte | >> & <>>> |
Reizināšanas prioritāte | & *% & * / |
Papildinājuma prioritāte | | & + & - + - ^ |
Diapazona veidošanas prioritāte | … <… |
Casting prioritāte | ir kā |
Nulles apvienošanās prioritāte | ?? |
Salīdzināšanas prioritāte | ! => = <= === == |
Loģiskās saiknes prioritāte | && |
Loģiskās disjunkcijas prioritāte | || |
Noklusējuma prioritāte | ~> |
Ternārā prioritāte | ?: |
Funkcija Bultu prioritāte | () |
Uzdevuma prioritāte | | =% = / = & <> = & = * = >> = << = = + = - = |
1. piemērs: operatīva operatora prioritāte
let x = 4 + 5 * 5 print(x)
Palaidot iepriekš minēto programmu, izeja būs:
29
Iepriekš minētajā piemērā, ja jūs lasāt izteicienu no kreisās uz labo, jūs varētu sagaidīt, ka izeja būs 45. Bet reizināšanas operatoram ir augstāka prioritāte nekā pievienošanas operatoram, tāpēc izteiksme 4 + 5 * 5
tiek vērtēta kā 4 + (5 * 5)
. Tāpēc print(x)
ekrānā tiek izvadīti 29 punkti.
Soļi | Operators | Izteiksme | Vērtība atgriezās no izteiksmes |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | drukāt (x) | 29 |
2. piemērs: ātrs operatora prioritāte ar sarežģītu piešķiršanas operatoru
var y = 15 y += 10 - 2 * 3 print(y)
Palaidot iepriekš minēto programmu, izeja būs:
19
Iepriekš minētajā piemērā izteiksme var y = 15
piešķir mainīgajam y vērtību 15.
Nākamajā izteiksmē y += 10 - 2 * 3
reizināšanas operatoram ir augstāka prioritāte nekā atņemšanas un savienojuma piešķiršanas operatoram ( +=
).
Tāpēc izteiksme y += 10 - 2 * 3
tiek vērtēta kā y = y + (10 - (2 * 3))
.
Soļi | Operators | Izteiksme | Vērtība atgriezās no izteiksmes |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Ātra operatora asociācija
Lai gan izteiksmes novērtēšanai ir iepriekš noteikti noteikumi, kurus nosaka operatora prioritāte, jūs varētu domāt, kas notiek, ja ir vairāki vienas prioritātes līmeņa operatori. Operatoru asociācija nosaka to, kā tiek grupēti vienas un tās pašas prioritātes operatori.
Programmā Swift operatori var būt vai nu asociēti pa kreisi, vai pa labi, vai tiem nav nekādas asociācijas. Operatoriem, kas ir asociēti pa kreisi, grupē savus operandus no paziņojuma kreisās puses, labās asociācijas operatoriem no labās puses un operatoriem, kuriem nav asociativitātes, nav noteikta uzvedība, ja tos izmanto secībā izteiksmē.
Operatora asociativitātes tabula
Zemāk esošajā tabulā parādīta Swift operatoru asociativitāte un prioritāte.
Ātra bibliotēkas asociativitāte (prioritāte no augstākās līdz zemākajai)Operatoru grupas | Piemēri | Asociativitāte |
---|---|---|
Bitu kustības prioritāte | >> & <>>> | neviena |
Reizināšanas prioritāte | & *% & * / | pa kreisi |
Papildinājuma prioritāte | | & + & - + - ^ | pa kreisi |
Diapazona veidošanas prioritāte | … <… | neviena |
Casting prioritāte | ir kā | neviena |
Nulles apvienošanās prioritāte | ?? | pa labi |
Salīdzināšanas prioritāte | ! => = <= === == | neviena |
Loģiskās saiknes prioritāte | && | pa kreisi |
Loģiskās disjunkcijas prioritāte | || | pa kreisi |
Noklusējuma prioritāte | ~> | neviena |
Ternārā prioritāte | ?: | pa labi |
Funkcija Bultu prioritāte | () | pa labi |
Uzdevuma prioritāte | | =% = / = & <> = & = * = >> = << = = | pa labi |
3. piemērs: ātra operatora asociācija
let x = 40 / 2 * 10 print(x)
Palaidot iepriekš minēto programmu, izeja būs:
200
Iepriekš minētajā programmā izteiksme tiek vērtēta no kreisās uz labo, jo operatori ietilpst reizināšanas prioritātes grupās un atstāj asociativitāti. Tāpēc dalīšanas operācija notiek agrāk, un jūs saņemat rezultātu 200 . Ko darīt, ja vispirms vēlaties veikt reizināšanu? Jums ir nepieciešams, lai wrap 2 * 10
izteiksmi () breketes kā:
let x = 40 / (2 * 10) print(x)
Palaidot iepriekš minēto programmu, izeja būs:
2
Jums nav jāiegaumē prioritāte un asociatīvā tabula. Lielāko daļu laika operatoru prioritātei un asociativitātei ir jēga pati par sevi. Šaubu gadījumā vienmēr varat izmantot tabulu atsaucei. Tāpat, lai kodu būtu vieglāk saprast, labāk izmantot iekavas.