Zkratka na hlavní stranu: Alt + Shift + horní 2(ě)
Linkedin FB e-mail Google Plus Twitter

Hledat na tomto webu

 
 

Osobní blog
Soukromý, neprofesní mikroblog.
Článek č. 43

Martin Adámek, Náchod & Meziměstí.

Osobní, soukromý, neprofesní mikroblog.

Není určen k profesní prezentaci:
Může obsahovat subjektivní názory a nevětšinové pohledy bez opory u odborné veřejnosti.
Ba může obsahovat i emoce.

Krátké příspěvky, podobné jako např. na Facebooku či jiné platformě, ale u mě na webu v prostředí mimo Facebook či jinou platformu provozovanou třetí stranou.

Kratší a méně důležité texty, které si nezaslouží článek na webu.

Další rozdíl oproti webu je,
že přepínáním jazykových verzí webu se přepíná i obsah dané webové stránky, pokud jsem ho vytvořil ve více jazycích,
zatímco přepínáním jazykových verzí zde na blogu se mění jen jazyk rozhraní, a text zůstává stejný.

Příspěvky se zde mohou objevovat v češtině, angličtině nebo polštině, velmi výjimečně i v jiných jazycích;
a mohu i míchat různé jazyky v jednom příspěvku.

Účelem tohoto mikroblogu je snadná publikace jednoduchých krátkých textů.

Výhodou by měla být vyšší frekvence příspěvků. Jelikož jsem si web navrhl velice robustně a má mnoho možností, je přidání nové stránky (článku) na web, se všemi vlastnostmi stránky, a zatřídění do struktury webu velice zdlouhavé.
Proto jsem si přidal tento nástroj pro snadnější lineární přidávání krátkých textů bez větších složitostí.

Blog, webový deník, místo pro publikaci krátkých poznámek, postřehů či úvah, nástěnka. Prostě blog.

Má to být něco jako přehled mých příspěvků na sociální síti – ale přímo na mém webu, bez závislosti na konkrétní sociální síti.

Dalším důvodem pro vznik tohoto blogu v rámci tohoto webu je, že tento web je archivován Národní knihovnou ČR, což zvyšuje šanci, že to, co sem píšu, bude někomu užitečné.
Tímto zdravím budoucí generace, pokud díky archivu právě čtou tento text v dobách z mého pohledu budoucích.


Martin Adámek – selfie v přírodě, modrá bunda, žlutá zimní čepice, na pozadí zamrzlý potok
(Foto 28. 12. 2021)

Vítám Vás zde a doufám, že tento blog bude užitečný.

Witam tutaj Państwa i mam nadzieję, że ten blog będzie przydatny.

Welcome here; I hope this blog will be useful.

Martin Adámek, Meziměstí, CZ, 01/2022.

(Současně s tímto blogem spouštím také
blog o češtině pro Poláky.
Některé posty zařadím do obou blogů,
ale jinak jsou to dva různé blogy pro různé cílové skupiny a s různým účelem.)

 


Pořadí argumentů okolo logického operátoru and.

Pořadí argumentů okolo logického operátoru and.

Poznámka pro začínající programátory nejen v PHP.


Je výraz "a and b" totéž jako výraz "b and a"?
Ano,
ve smyslu binární logiky, podle Booleovy algebry, v souladu s matematikou, znamenají oba výrazy totéž.

Je tedy jedno, jestli v PHP napíšete
"if ($a and $b)",
nebo
"if ($b and $a)"
?
Ne,
není to jedno.

Jakto?

Vezmu to trochu oklikou, pro názornost:
Když máme výraz "A and B"
(A a zároveň B; A × B)
a zjistíme, že A == false,
tak co z toho plyne?

Plyne z toho, že výsledek bude false.
Nezávisle na tom, jaká je hodnota proměnné B.

Ještě jednou: Nezávisle na tom, jaká je hodnota proměnné B!
Čili nás už v tu chvíli hodnota proměnné B nezajímá.

A úplně stejně uvažuje i engine, který vykonává skript napsaný v jazyce PHP.

Takže pořadí podmínek má při použití operátoru "and" naprosto fatální dopad:



1) Velmi typická situace:

if ( isset($a) and ($a>0) ) {}

Tento zápis je v naprostém pořádku.
Pokud proměnná $a není nastavena,
tak PHP ví, že výsledek závorky bude každopádně false,
proto se už dál nezabývá další podmínkou, tedy netestuje, zda je hodnota $a větší než nula, a vše je v pořádku.

Není potřeba používat zápis
if ( isset($a) ) if ( $a>0 ) {},
protože v praxi oba zápisy vyjdou úplně na stejno.


Zatímco kdybyste pořadí dílčích podmínek zaměnili,
tak by vždy nejdříve bylo zjišťováno, zda má proměnná $a hodnotu větší než nula.
A to i v případě, že proměnná $a vůbec není definována, vůbec neexistuje.
PHP pak v takovém případě hodí warning,
a věřte mi, že warningy nejsou od toho, aby se ignorovaly,
warningy jsou od toho, aby se řešily,
protože warning je potenciální budoucí chyba.

A stejně jako to je u validity HTML kódu (kde mnozí ignorují chyby, protože "to stejně funguje"),
i zde platí, že když si budete kód udržovat hezký, čistý, validní, korektní, uklizený,
tak si potom hned všimnete nějakého warningu, který na vás někdy vyskočí, a který tak může zabránit hypotetické závažné chybě v programu.

A i kdybyste chtěli psát kód plný warningů (nedoporučuji),
tak pořád platí, že isset napsaný až po operátoru and, když už se předtím testovala konkrétní hodnota, je úplně k ničemu.
Nemusíte už ověřovat, jestli nějaká proměnná vůbec existuje, když už jste stejně na férovku zjišťovali její hodnotu.


Takže na pořadí dílčích podmínek okolo operátoru and záleží.



2) Inkrementace (přičtení jedničky). I jiné akce:

PHP vám umožňuje přímo v podmínce měnit hodnotu proměnné.

(Takže bacha, abyste při porovnávání používali dvě rovnítka;
jak jedno vynecháte, tak hodnotu druhé proměnné přiřadíte té první,
a budete se strašně divit, co ten skript dělá.)

Nejde ale jen o rovnítko.

Přímo v porovnání můžete použít i zápis $a++,
případně také ++$a (což je fatální rozdíl právě při porovnávání proměnných).

Takže není jedno, zda tato podmínka bude posuzována, nebo nebude.
Když ji budete mít až za and,
a dílčí podmínka umístěná před and vrátí dílčí hodnotu false,
tak ta druhá podmínka nebude vůbec posuzována, čili to, co je v ní ukryto, se nevykoná,
a vy byste se mohli hodně divit.


Totéž platí i pro dekrementaci (odečtení jedničky)
"$a--", resp. "--$a".


A platí to i pro SQL dotazy
a pro spouštěné funkce (!)
a pro cokoliv dalšího,
co vám vrátí nějakou hodnotu (takže to třeba použijete v podmínce),
jenže cestou to něco dělá, něco mění (takže fakt není jedno, jestli to proběhne, nebo ne).




3) Optimalizace výkonu.

Pokud mám dvě dílčí hodnoty, jejichž pořadí není ovlivněno ani bodem 1 ani bodem 2 ad výše,
tak mne může zajímat pravděpodobnost, že v reálném provozu bude některá z těch dílčích podmínek obvykle vracet nějakou předvídatelnou hodnotu.


Např. pokud budu mít podmínku v cyklu "while" (nebo "do while"),

kde jedna z těch podmínek bude řídicí, provozní;
a druhá dílčí podmínka bude nouzová, záchranná, pro případ netypické situace, abychom se nezacyklili a korektně cyklus ukončili bez zbytečného zvyšování teploty v serverovně a stresování uživatelů,

tak naprosto dává smysl testovat nejdříve tu provozní, pak teprve použít "and", a pak teprve napsat tu jisticí podmínku.

Protože ta jisticí podmínka bude mít typicky hodnotu true (když se bavíme o modelu while( něco and něco) { něco dělej} ),
a tak je nevhodné ji uvádět jako první, když se po ní téměř vždy bude provádět i ta druhá.
Je lepší uvést jako první tu, která nám častěji hodí false, a tak způsobí, že se druhá dílčí podmínka už nebude testovat.
Pokud jedna z podminek je vetsinou false, tak ji dam jako prvni, a diky tomu ta druha obvykle neni zbytecne testovana.


Samozřejmě kromě situací ad bod 1 (isset) nebo ad bod 2 (výkon akce v podmínce), to je jasné.






Takže na pořadí okolo "and" v PHP záleží.


Jo, a toto všechno samozřejmě platí i pro operátor "or".
Jen naopak. Tam se další dílčí podmínka netestuje, pokud má ta předchozí hodnotu true.

Takže kdyby šlo třeba o optimalizaci výkonu, tak okolo logického operátoru "or" narovnám dílčí podmínky tak,
aby první byla ta, která má častěji hodnotu true, protože tím zařídí, že se počítač nebude muset zabývat tou druhou dílčí podmínkou.






Shrnutí a SEO keywords:
Podminka if
operator and or
na poradi zalezi
operator a zaroven
operator nebo
PHP

V praxi zalezi na poradi dilcich podminek,
i kdyz teoreticky matematicky na nem zalezet nema.


Ono to vlastně tématicky trošku souvisí s Karnaughovou mapou:
Tam také vidíme, že na základě nějaké hodnoty nějaké vstupní proměnné si můžeme dovolit nezkoumat hodnotu některé jiné proměnné, protože jistě víme, že už nás v tu chvíli vlastně nezajímá. Tak to samé ví i PHP engine.

Můžete si to snadno vyzkoušet:

<?php

$i=0;

if (0 and $i++>0) echo '';

echo $i.'<br />';

if ($i++>0 and 0) echo '';

echo $i.'<br />';

?>

 

Související odkazy

  


Líbil se Vám článek?


Zpětná vazba – hlasování

Hlasy se na serveru připočítají k počitadlům pro tento článek, např. kolikrát tento článek někoho pobavil a kolikrát tento článek někomu pomohl.

Neukládají se jednotlivá hlasování (vzájemná kombinace hlasů, datum, čas, ani jiné údaje).
Proto nemá smysl odesílat prázdný hlas, nemělo by se co k čemu přičíst.

 

Ve Vašem prohlížeči nebude uložena žádná informace (cookies) o tom, že už jste hlasovali.
- Ve Vašem prohlížeči tedy nebude vidět, jak jste hlasovali.
- Kdykoliv budete moci hlasovat znovu, pokud Vám článek opakovaně pomůže (pobaví Vás, potěší, …).
- Pokud Vás právě u jednoho počítače sedí více, mohou postupně hlasovat další lidé.

Počítám člověkohlasy, nikoliv lidi.
Tedy kolikrát článek někomu pomohl,
nikoliv kolika lidem pomohl
.

Třikrát potěšeného jednoho čtenáře počítám stejně jako tři různé jednou potěšené čtenáře.

Každý má do budoucna neomezený počet hlasů.
Když zapomenete, že jste pro tento článek už hlasovali, nevadí – když Vám někdy v budoucnu bude např. užitečný znovu, tak mu znovu pošlete hlas, že Vám byl užitečný.

Můžete si zvolit 1 až N možností

Štítky, labels, kategorie, témata, tagy, hashtagy

(ve vývoji)
 
#science-technology   #electro-ict    
#languages  
 

Skok nahoru na: Navigační menu
(klávesová zkratka Alt + Shift + horní „5”)

Zaujala Vás tato stránka?

  • Přidat do záložek (Ctrl+D)
  • Sdílet odkaz (vysílačka)Skok nahoru na:
  • Vytisknout (Ctrl+P)
  • Citovat podle ČSN ISO 690

    Tuto stránku

    ADÁMEK, Martin. Osobní blog: Soukromý, neprofesní mikroblog. . Martin Adámek [online]. Náchod / Meziměstí [cit. 2022-09-30]. Dostupné z: https://www.adamek.cz/blog

    Celý web

    ADÁMEK, Martin. Martin Adámek [online]. Náchod / Meziměstí [cit. 2022-09-30]. Dostupné z: https://www.adamek.cz

 

 
 

Národní kulturní dědictví

WebArchiv – Stránky archivovány Národní knihovnou ČR Tyto stránky jsou pravidelně archivovány Národní knihovnou ČR pro svou kulturní, vzdělávací, vědeckou, výzkumnou nebo jinou informační hodnotu za účelem dokumentace autentického vzorku českého webu. Jsou součástí kolekce českých webových stránek, které NK ČR hodlá dlouhodobě uchovávat a zpřístupňovat pro budoucí generace. Jejich záznam je součástí České národní bibliografie a katalogu NK ČR.  

 

 
 

Pro rozptýlení

Co to znamená, když se venku blýská?
Aktualizují se Google Maps.

 

Pro zamyšlení

Až budeš mít pocit, že se proti tobě všechno spiklo, pak si vzpomeň, že ani letadlo nestartuje s větrem v zádech, ale proti němu.
[Henry Ford]