hlmod.hu
https://hlmod.hu/

AmxModX Alapozó 05. - Kifejezések, operátorok
https://hlmod.hu/viewtopic.php?f=55&t=3461
Oldal: 1 / 1

Szerző:  Metal [ 2012.02.17. 09:47 ]
Hozzászólás témája:  AmxModX Alapozó 05. - Kifejezések, operátorok

Kifejezések, operátorok

A kifejezések hasonlóan néznek ki, mint a matematikában található kifejezések ezért ahhoz hasonló műveletekkel a Pawn nyelvben. Nem kell megijedni, nem fogunk belebonyolódni a matematikába, csupán az alapok tisztázása végett mélyedünk el benne. A kifejezések a bennük szereplő operátorokból, azonosítókból és zárójelekből épülnek fel - legtöbb esetben - a matematikai szabályok szerint.
Minden kifejezés -bármilyen összetettek - kiértékelődnek és visszaadnak egy értéket. A kiértékelés folyamán a részkifejezések/literálok kiértékelésnek sorrendjét az operátorok precedenciája és azok esetleges zárójelezés határozzák meg: Először a belső zárójelekben lévő részkifejezések értékelődnek ki, ha azon belül vannak operátorok, akkor precedencia szerint sorrendben. (pl először a szorzás/osztás, majd összeadás/kivonás stb...). A precedenciákról korábbi fejezetben írtam össze egy táblázatot, így azt ide már nem illesztem be.
Kifejezéseket a kódban bárhol s bármikor használhatsz, (akár egy sorban is, igaz az fordítási hibát dob). Legtöbbször az eredményeket meg változókban tároljuk az = operátor segítségével, vagy maga a kifejezést egy függvény paraméterébe ágyazzuk.

Most pár példát írok össze. Ezeknek nagy része nem fordul le, de nem is ez a célom, hogy fordítható kódot mutassak, hanem azt, hogy demonstráljam a kifejezések működést.

Kód:
  1. // Ez a legegyszerűbb kifejezés. Ezeket - a logika nyelvén - atomi kifejezésnek hívjuk, mivel egyelemű, ezekből épülnek fel az összetett kifejezések.

  2. 0

  3. // A zárójelezések is működnek ebben az esetben, és könnyebb olvashatóságot biztosít

  4. (0)

Ha egy kifejezés értéke nem nulla vagy nem hamis, akkor nem csak az értékét adja vissza, hanem azt is, hogy "igaz" (true). Ellenkező esetben nullával fog visszatérni, ami hamis (false). (Lényegében: minden nem 0 eredményű kifejezés igaz, míg a 0 értékűek false)

Matematikai kifejezések és operátorok
Kód:
  1. // Példák matematikai kifejezésekre.

  2. // Operátorok:

  3. // + mint összeadás

  4. // - mint kivonás

  5. // * mint szorzás

  6. // / mint osztás

  7. // % mint maradékos osztás, ami a maradékot fogja visszaadni (pl 7%3 értéke 1)

  8. (2+3)                       // Eredmény: 5

  9. ((2*7)+3)                   // Eredmény: 17

  10. ((((1+3)/2)*4)-6)           // Eredmény: 2

  11. ((2*10) % 7)                 // Eredmény: 6

  12. // További kifejezésekre példa

  13. (true)                      // Eredmény: true

  14. (5.0 + 2.3)                 // Eredmény: 7.3 Float típusú érték.

A kifejezéseket értékül adhatjuk új, vagy meglévő változóknak
Kód:
  1. new a = 3                   // 'a' változó létrehozva 3-as kezdeti értékkel (a==3)

  2. new b = a + 7               // 'b' változó létrehozva ( a + 7 )-as kezdeti értékkel (b==10)

  3. a = a - 1;                  // 'a' értékét csökkentjük eggyel (a==2)

  4. new c = b * a / 2           // 'c' változó létrehozva ( b * a / 2 ) értékkel (c==10)

Post/pre fixes operátorok
Kód:
  1. a++          // visszaadja (a)-t, majd növeli egyel.

  2. ++a          // növeli (a)t, és utána adja vissza

  3. // Lényegében:

  4. /*

  5. változó++ › posztfixes alak, csak a kifejezés kiértékelése után növeli az értékét, ehhez létrehoz egy átmeneti változót.

  6. ++változó › prefixes alak, nincs átmeneti változó, azonnal növeli az értékét, általában ezt használjuk.

  7. */

  8.  

  9. // Hasonló módon működik a -- operátor is

  10. a--

  11. --a

  12. //mint említettem, az a++ operátor létrehoz egy átmeneti változót, mivel hasonlóan működik, mint az alábbi kód.

  13. a = a + 1

  14. // Az ++a ezzel ellentétben direktben növeli az értékét, nem szükséges létrehoznia ideiglenes változót.

  15.  


"Csonkolt" operátorműveletek

Sok esetben szükséges egy adott operátor értékének megváltoztatására általában ez alapján tesszük meg:
Kód:
  1. a = a OP y

Néhány operátor esetében használhatunk rövidítéseket, amik így néz ki:
Kód:
  1. a OP= x

Alábbi műveleteknek létezik rövidebb alakja
Kód:
  1. a += 1       // Növeli 'a'-t 1-el

  2. a -= b       // 'a' értékét csökenti 'b' vel

  3. a *= 0       // 'a'-t szorozza 0-val

  4. a /= 2       // 'a'-t ossza 2-vel


Logikai kifejezések és operátorok
Nem csak matematikai operátorokkal rendelkezik a nyelv, hanem van lehetőség logikai operátorok használatára is.
Az egyik legfontosabb operátor az ÉS operátor (&&). Kétoperandusú művelet, eredménye igaz, ha mindkettő kifejezés értéke igaz, ellenkező esetben hamis.
A továbbiakban az igazat true-val és a hamisat false-szal fogom jelölni
Kód:
  1.  

  2. (1 && 0)                    // Ez false, mivel 0 false vissza (lsd feljebb)

  3. (1 && 2)                    // Mindkét kifejezés true így true lesz a && eredménye

  4. (true && false)             // false

  5. (false && false)            // false

  6. (true && true)              // true


A másik fontos operátor a VAGY (||) operátor. Ha valamelyik operandusa true, akkor || értéke true, ellenkező esetben false
Kód:
  1. (1 || 0)                    // true, mivel az első kifejezés (1) true

  2. (1 || 2)                    // true

  3. (true || false)             // true

  4. (false || false)            // false

  5. (true || true)              // true


Léteznek további (annyira nem használt) operátorok.
Ilyen a bitenkénti ÉS ami két operandus azonos biteit ÉSeli össze az && operátorral, eredménye az újonnan kapott szám.
Kód:
  1. // Például a 11 és 8 bitenkénti és eredménye 8, mivel:

  2. // 11 (1011) és 8 (1000)

  3. (11 & 8) //Eredménye 8 (1000)

  4. // 4 (00100) és 16 (10000)

  5. (16 & 4) eredménye 0

A következő ilyen operátor a bitenkénti vagy (|)
Az elve hasonló: a két kifejezés azonos btjeit összeVAGYolja (||) és visszaadja az így kapott eredmény
Kód:
  1. // 9 (1001) és 3 (0011)

  2. (9 | 3) eredménye: 11

Ugyanilyen ritkán használt, de fontos operátor a bitshiftelés (nem tudtam hirtelen jó szót rá :))
Ezek az << és >> operátorok. Eltolja a biteket az operátornak megfelelő "irányba":
Kód:
  1. // Példák:

  2. // 2 (00010) elcsúsztatva 3 - mal:

  3. (2 << 3) eredménye: 16 (10000)

  4. // Másik irányba való shiftelés:

  5. // 16 (10000) 3-mal:

  6. (16 >> 3) eredménye: 2 (00010)

Utolsóként, egy fontos operátor mutatok b, ez a bitenkénti tagadás. Ezt használjuk az igazságértékek tagadására is. Számokra használva a számot bitenként tagadja (0-ból 1, 1-ből 0 lesz)
Példák:
Kód:
  1. (!true)  // Eredménye: false

  2. (!false) // Eredménye: true

  3. !9 // Eredménye: 6  (9 (1001) => 6 (0110)

  4. // Számok esetében szokás a ~ (bitenkénti komplemens) operátort használni:

  5. (~(9))  // Eredménye: 6


Röviden ennyi lenne.
Várom kérdéseiteket.
Metal

Szerző:  kiki [ 2012.02.17. 14:07 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

Jólett Metal, ezek nagy részével már találkoztam szóval ezzel kapcsolatban nincs kérdésem!

Szerző:  Silent [ 2012.02.17. 19:06 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

Jöhet a következő :) XD

Szerző:  Silent [ 2015.12.05. 20:12 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

Öhm. Hol marad ez az operátor? Vagy ez Pawn-ban nem létezik? :D

Kód:
 condition ? exp1 : exp2 

Szerző:  Akosch:. [ 2015.12.05. 20:23 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

De-de, létezik pawnban is csak ritkán használják.

Szerző:  mforce [ 2015.12.05. 20:32 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

Pedig használják, hát most a sok skin menünél mióta szólt crb mindenki úgy írja a skin után,hogy aktív vagy nem, nem if-el :D

Szerző:  LyleChriss [ 2015.12.05. 20:39 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

True, az enyémben is úgy van. :lol:
Bár nekem mforce szólt. :)

Szerző:  ultraibolya [ 2015.12.10. 18:34 ]
Hozzászólás témája:  Re: AmxModX Alapozó 05. - Kifejezések, operátorok

Nekem senki nem szólt,és nem is használom.he

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/