Operatora ātra prioritāte un asociācija (ar piemēriem)

Š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.

Izpildes soļi
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 = 15piešķir mainīgajam y vērtību 15.

Nākamajā izteiksmē y += 10 - 2 * 3reizināšanas operatoram ir augstāka prioritāte nekā atņemšanas un savienojuma piešķiršanas operatoram ( +=).

Tāpēc izteiksme y += 10 - 2 * 3tiek vērtēta kā y = y + (10 - (2 * 3)).

Izpildes soļi
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 * 10izteiksmi () 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.

Interesanti raksti...