Jump to content

návod #5 Operátory – další typy op. a priorita op. [*]


vEnd

Recommended Posts

  • Hlavní moderátor

Obtížnost: 1.png

Osnova:
1. Úvod
2. Relační operátory
3. Logické operátory
4. Přiřazovací operátory
5. Bitové operátory

6. Priorita operátorů
7. Závěr

1. Úvod
Vítám Vás u pátého návodu pro začínající pawnery. Téma se týká dalších druhů operátorů a navazuje na předchozí návod o operátorech. Abyste tento návod pochopili, přečtěte si nejprve ten předchozí.

2. Relační operátory
Úkolem relačních operátorů je porovnávat operandy (vrací pravdu, nebo nepravdu). S nimi se zpravidla setkáme v podmínkách. Jedná se o operátory rovnosti, nerovnosti, větší/menší a větší/menší nebo rovno.

.

new cislo = 5, cislo2 = 10;

cislo == cislo2 //dvě rovnítka porovnají, zda jsou čísla stejná (výsledek je false, 5 a 10 nejsou stejná)
cislo != cislo2 //vykřičník a rovnítko zjistí, zda se čísla různí (výsledek je true, 5 a 10 jsou různá)
cislo > cislo2 //znak pro "větší" zjistí, zda je číslo vlevo větší než to vpravo (výsledek je false, 5 není větší než 10)
cislo < cislo2 //znak pro "menší" zjistí, zda je číslo vlevo menší než to vpravo (výsledek je true, 5 je menší než 10)
cislo >= cislo2 //znak pro "větší nebo rovno" zjistí, zda je číslo vlevo větší nebo rovno tomu vpravo (výsledek je false, 5 není větší ani rovno 10)
cislo <= cislo2 //znak pro "menší nebo rovno" zjistí, zda je číslo vlevo menší nebo rovno tomu vpravo (výsledek je true, 5 není rovno 10, ale je menší)

.

Všechno to jsou binární operátory. Doufám, že není třeba si je blíže vysvětlovat, princip je stejný jako v matematice, stačí nám znalosti základní školy.

 

Zajímavost:

 

 

Pawn do jisté míry umožňuje vytvořit podmínku pro interval ve tvaru: cislo . Má to však své omezení – u celých čísel (a tedy i znaků) není možné, aby vedle sebe ležely dvě konstantní hodnoty (tzv. rvalue). V takovém případě vrací podmínka vždy false! U desetinných čísel tento problém nenastává. Několik příkladů:


new a = 1, b = 2, c = 3;

a < b < c // funguje správně, vrací true
a < 2 < c // funguje správně, vrací true
1 < b < 3 //funguje správně, vrací true
a < 2 < 3 //nefunguje správně, vrací chybně false (leží vedle sebe 2 konstantní hodnoty)

new Float:fA = 1.5, Float:fB = 2.33, Float:fC = 3.8;

fA < fB < fC // funguje správně, vrací true
fA < 2.33 < fC // funguje správně, vrací true
1.5 < fB < 3.8 //funguje správně, vrací true
fA < 2.33 < 3.8 //funguje správně, vrací true 


Vzhledem k neočekávanému chování nedoporučuji používat, pokud s Pawn teprve začínáte a nevíte přesně, co děláte.

 

 


3. Logické operátory
Pomocí logických operátorů tvoříme složitější podmínky. Stejně jako relační, tak i tyto operátory vrací buď pravdu, nebo nepravdu. Logickými operacemi jsou logický součin, logický součet a logická negace.

a) Logický součin
Logický součin je binární operace a značí se dvěma ampersandy (&&). Výsledek této operace je pravdivý, právě když jsou oba výrazy pravdivé.

.

new cislo = 5, cislo2 = 10, cislo3 = 15;

cislo < cislo2 && cislo2 > cislo3 //výsledek je false

.

Prvním výrazem je "cislo ". Ten je pravdivý, 5 je menší než 10. Druhým výrazem je "cislo2 > cislo3". To pravda není, 10 není větší než 15. Jeden z výrazů je nepravdivý, proto je celá podmínka nepravdivá.

b ) Logický součet
Logický součet je binární operace a značí se dvěma svislicemi (||). Výsledek této operace je pravdivý, když alespoň jeden výraz je pravdivý.

.

cislo < cislo2 || cislo2 > cislo3 //výsledek je true

.

Vraťme se k předchozímu příkladu. Už víme, že první výraz je pravdivý a druhý nepravdivý. Poněvadž se teď jedná o logický součet, tak celá podmínka bude pravdivá – stačí jen jeden pravdivý výraz.

Při složitějších podmínkách si nemusíme být jisti tím, jak ji jazyk vyhodnotí. Proto nám Pawn umožňuje i v tomto případě použít kulaté závorky k určení priority vyhodnocení.

.

(cislo < cislo2 && cislo2 > cislo3) || (cislo3 > cislo && cislo3 >= cislo2)

.

Teď jsme si jistí, že se napřed vykoná logický součin a až poté logický součet.

c) Logická negace
Logická negace je unární operace a značí se vykřičníkem (!). Účelem této operace je převrátit pravdu v nepravdu a naopak.

.

new bool:logicka = true;

!logicka //hodnota bude false

.

Počáteční hodnota proměnné logicka je true. Po znegování bude hodnota převrácená – false.

4. Přiřazovací operátory
Operátor přiřazení již známe – rovnítko. Probrali jsme jej v předchozích návodech, takže teď si ho jen rychle zopakujeme. Na levé straně je proměnná/pole, do které(ho) přiřazujeme, a na pravé straně hodnota nebo výraz, který přiřazujeme.

.

new cislo = 5; //přiřazení celého čísla
new desetinne = 3.14; //přiřazení desetinného čísla
new znak = 'o'; //přiřazení znaku
new retezec[] = "ahoj"; //přiřazení řetězce
new pole[] = {1, 3, 6}; //přiřazení hodnot poli

.

Pro zajímavost (rozklikněte spoiler):


Operátorů přiřazení je ve skutečnosti víc. Někdy potřebujeme s danou proměnnou provést nějakou operaci, řekněme přičíst k ní číslo 5. Pak by to vypadalo takto:

.

cislo = cislo + 5;

.

Můžeme si ale práci ulehčit tak, že použijeme operátor +=:

.

cislo += 5;

.

Je to totéž co předchozí kód, akorát kratší a elegantnější. Stejně to funguje i s dalšími binárními operátory (-=, *=, /= atd.).

 

.

5. Bitové operátory
Bitové operátory manipulují s bity. Tato problematika zdaleka přesahuje znalosti potřebné pro nováčky, proto ji zde uvádět nebudu. Nicméně, pokud se přeci jen chcete o manipulaci s bity něco dozvědět, přečtěte si tento návod, kde se tomu Mort podrobně věnuje.

 

6. Priorita operátorů

Už jsme si zmínili, že prioritu operátorů můžeme ovlivnit kulatými závorkami jako v matematice, ale jaká je vlastně výchozí priorita operátorů? Na to se lze podívat do spoileru. Je to jen pro zajímavost, nic, bez čeho bychom se neobešli.

 

 

 

c70d9e813e6147afbd4806c24fed21be.png

 

 

.

7. Závěr
A tímto končí druhý návod věnující se operátorům. Nyní už víte to potřebné o operátorech. Samozřejmě jich existuje mnoho, neuvedl jsem všechny (čárka, dvojtečka i všechny druhy závorek jsou také operátory), ale to už jsou drobnosti, které v praxi sami pochytíte.

Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu.

 

Ověřený návod

Tento návod prošel validací, a lze ho proto považovat za ověřený.

  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

  • 1 year later...

zdar, k tým relačným operátorom by sa mohla prihodiť aj poznámka, že sa dajú aj "opakovať" napr. "a < b < c...". Pričom treba ale spomenúť, že sa v takomto zápise nesmú stretnúť pri sebe dve rvalue (pevné hodnoty) napr. "1 < 2 < a", lebo to vracia vždy false.

Edited by milous22
Link to comment
Share on other sites

  • Hlavní moderátor

zdar, k tým relačným operátorom by sa mohla prihodiť aj poznámka, že sa dajú aj "opakovať" napr. "a false.

Ahoj, přidám to tam, ale do spoileru jako zajímavost (má to náročnost 1/5 a bez tohohle se nováčci hravě obejdou). Díky za návrh na doplnění.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...