Podmínky Yoda - Yoda conditions
v programování žargon, Podmínky Yoda (také zvaný Yoda notace) je styl programování kde jsou dvě části výrazu obráceny od typického pořadí v a podmíněné prohlášení. Podmínka Yoda umístí konstantní část výrazu na levou stranu podmíněného příkazu. Název tohoto stylu programování je odvozen od Hvězdné války pojmenovaná postava Yoda, SZO mluví anglicky s nestandardní syntaxí.
Podmínky Yoda jsou součástí Symfony[1] a WordPress[2] standardy kódování.
Příklad
Podmíněný příkaz by se obvykle psal jako:
-li ($ hodnota == 42) { /* ... */ }// Přečte jako: „Je-li hodnota 42 ...“
Podmínky Yoda popisují stejný výraz, ale obrácené:
-li (42 == $ hodnota) { /* ... */ }// Přečte jako: „Je-li 42 rovno hodnotě ...“
Konstanta je zapsána nalevo od operátor porovnání a proměnná, jejíž hodnota se kontroluje proti konstantě, se zapíše doprava. Tato objednávka je srovnatelná s nestandardním anglicky mluvícím stylem Yody, což je zhruba předmět – předmět – sloveso[3] (např. „Až dosáhnete devíti set let, vypadejte dobře, že ne.“[4][5]).
Výhoda
Detekce chyb
Umístěním konstantní hodnoty do výrazu se nezmění chování program (pokud nejsou hodnoty vyhodnoceny jako nepravdivé - viz níže). V programovacích jazycích, které používají jeden znaménko rovná se (=
) pro úkol a ne pro srovnání, možné chyba je přiřadit hodnotu neúmyslně namísto psaní podmíněného příkazu.
-li (moje číslo = 42) { /* ... */ }// To přiřadí 42 mému číslu místo vyhodnocení požadované podmínky
Použití podmínek Yoda:
-li (42 = moje číslo) { /* ... */ }// Toto je syntaktická chyba a nebude se kompilovat
Protože 42 je a konstantní a nelze ji změnit, tato chyba bude chycen podle překladač.
Booleovský myBoolean = skutečný;-li (myBoolean = nula) { /* ... */ }// To způsobí NullPointerException v prostředí Java Runtime, ale legální v kompilaci.
Vyhněte se některým typům nebezpečného nulového chování
Podmínky Yoda pomáhají s nebezpečným chováním v některých situacích.
Tětiva myString = nula;-li (myString.rovná se("foobar")) { /* ... */ }// To způsobí NullPointerException v Javě
S podmínkami Yoda:
Tětiva myString = nula;-li ("foobar".rovná se(myString)) { /* ... */ }// To je nepravdivé, jak se očekávalo
Vyjádření matematiky
Podmínky Yoda lze snáze pochopit, když výraz představuje řádek skutečných čísel.
-li -1 <= X <= 1:
Bez podmínek yoda:
-li ((X >= -1) && (X <= 1)) { /* ... */ }
S podmínkami yoda:
-li ((-1 <= X) && (X <= 1)) { /* ... */ }
Kritika
Podmínky Yoda jsou široce kritizovány za narušení čitelnosti zvýšením kognitivní zátěž čtení kódu.[6][7][8]
Některé programovací jazyky (např Rychlý a verze Krajta níže 3.8) nepovolují přiřazení proměnných v rámci podmíněných podmínek - například požadováním, aby přiřazení nevracela hodnotu, nebo definováním jako součást jejich gramatika invariantní, že podmínky nemohou obsahovat příkazy přiřazení - v takovém případě není možné tuto chybu narazit (to znamená, že by byla detekována jako chyba syntaxe analyzátorem před vstupem do programu runtime ).[9] Mnoho překladačů vytváří varování pro kód, jako je if (myNumber = 42)
(např GCC -Stěna
varuje možnost navrhnout závorky kolem úkolu použitého jako pravdivostní hodnota), který programátora upozorní na pravděpodobnou chybu. V dynamických jazycích, jako je JavaScript, linters jako ESLint může varovat před přiřazením uvnitř podmíněného.[10]
Výhodu vyhýbání se chování null lze také považovat za nevýhodu, protože chyby nulového ukazatele lze skrýt a objeví se až mnohem později v programu.
Další nevýhoda se v C ++ objevuje při porovnávání jiných než základních typů, protože == je operátor a nemusí existovat vhodný přetížený operátor funkce definována. Příklad: Microsoft CComBSTR
porovnat s a řetězec doslovný, psáno jako if (L "Hello" == cbstrMessage)
, nemapuje na funkci přetížení.[11]
Reference
- ^ „Standardy kódování (přispívají k Symfony)“. Symfony.com. Citováno 2016-11-12.
- ^ „Standardy kódování PHP - Vytvořte jádro WordPressu“. make.wordpress.com. Citováno 2019-08-15.
- ^ Pullum, Geoffrey K. (2005-05-18). „Yoda's Syntax the Tribune Analyses; Supply More Details I Will!“. Itre.cis.upenn.edu. Jazykový protokol. Citováno 2014-12-22.
Jedním ze způsobů, jak se dívat na Yodovu syntaxi, je to, že vykazuje známky upřednostňování syntaxe OSV (Object-Subject-Verb) jako základního řádu v jednoduché klauzuli.
- ^ „The StarWars.com 10: Best Yoda Quotes“. starwars.com. Lucasfilm, Ltd. 2013-11-26. Citováno 2014-12-22.
Když dosáhnete devíti set let, vypadejte tak dobře, že ne.
- ^ „Citáty pro Yodu (znak)“. imdb.com. Amazonka. Citováno 2014-12-22.
Až dosáhneš devět set let *, * dosáhneš, vypadáš tak dobře * nebudeš, hmm?
- ^ „Rychlé tipy pro snížení kognitivního zatížení kódu“. 21. března 2017.
- ^ „Proč používat podmínky Yody bys asi neměl být“. 2. srpna 2017.
- ^ „Podmínky Yoda: Proč byste je neměli používat“. 16. srpna 2017.
- ^ „Programovací jazyk Swift (Swift 3.0.1): Základní operátoři“. Developer.apple.com. 2016-10-27. Citováno 2016-11-12.
- ^ "zakázat operátory přiřazení v podmíněných příkazech". eslint.org. Citováno 2017-02-17.
- ^ „CComBSTR :: operator“. Msdn.microsoft.com. Citováno 2016-11-12.
externí odkazy
- united-coders.com: Co jsou podmínky Yoda? Příklady v Jáva
- Nový programovací žargon Zmíní podmínky Yoda v seznamu nového programovacího žargonu
- Kódování ve velkém stylu Pravděpodobný původ pojmu
- Podmínky Yoda v Javě Potenciální úskalí této techniky
- Yoda podmínky velmi škodlivé se zdá být Jak tato technika může udělat mnohem více škody než užitku