Pyramid of doom (programování) - Pyramid of doom (programming)
![]() | tento článek může být pro většinu čtenářů příliš technická na to, aby tomu rozuměli. Prosím pomozte to vylepšit na aby to bylo srozumitelné pro neodborníky, aniž by byly odstraněny technické podrobnosti. (Února 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) |
v programování, pyramida zkázy je běžný problém, který vzniká, když program používá mnoho úrovní vnořeného odsazení k řízení přístupu k funkci. To je běžně vidět při kontrole nulové ukazatele nebo manipulace zpětná volání.[1] Dva příklady termínu souvisí s konkrétním stylem programování v JavaScript,[2] a hnízdění pokud prohlášení který se vyskytuje v objektově orientované programování jazyky, když jedním z objektů může být nulový ukazatel.[3][4]
Příklady
![]() | Tato sekce je napsán jako manuál nebo průvodce.Červen 2020) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Nejmodernější objektově orientované programovací jazyky použijte styl kódování známý jako tečkový zápis, který umožňuje zapsat více volání metod v jednom řádku kódu, přičemž každé volání je odděleno tečkou. Například:
šířka = Okna("Hlavní").pohledy(5).velikost().šířka();
Tento kód obsahuje čtyři různé pokyny; nejprve vyhledá v kolekci oken okno s názvem „Main“, poté vyhledá v kolekci zobrazení daného okna pátý subview v něm a poté zavolá velikost
metoda pro vrácení struktury s rozměry pohledu a nakonec volá šířka
metoda na této struktuře k vytvoření výsledku, který je přiřazen k názvu proměnné šířka
.
Problém tohoto přístupu spočívá v tom, že kód předpokládá, že všechny tyto hodnoty existují. I když je rozumné očekávat, že okno bude mít velikost a tato velikost bude mít šířku, není vůbec rozumné předpokládat, že okno s názvem „Main“ bude existovat, ani že má pět dílčích náhledů. Pokud je některý z těchto předpokladů nesprávný, bude jedna z metod vyvolána na null, což způsobí chybu nulového ukazatele.
Aby se zabránilo této chybě, musí programátor zkontrolovat každé volání metody, aby se ujistil, že vrací hodnotu. Bezpečnější verze stejného kódu by byla:
-li Okna.obsahuje("Hlavní") { -li Okna("Hlavní").pohledy.obsahuje(5) { šířka = Okna("Hlavní").pohledy(5).velikost().šířka(); // více kódu, který pracuje s theWidth }}
Pokud si programátor přeje použít tuto hodnotu na základě toho, zda existuje nebo není platná, funkční kód uvnitř -li
všechny příkazy jsou tlačeny doprava, takže je obtížné číst delší řádky. To často vede k pokusům o „zploštění“ kódu:
-li Okna.obsahuje("Hlavní") { okno = Okna("Hlavní") }-li okno != nula && okno.pohledy.obsahuje(5) { pohled = okno.pohledy(5) }-li pohled != nula { šířka = pohled.velikost().šířka(); // další kód}
Nebo alternativně:
-li !Okna.obsahuje("Hlavní") { // chyba rukojeti} jiný -li !Okna("Hlavní").pohledy.obsahuje(5) { // chyba rukojeti} jiný { šířka = Okna("Hlavní").pohledy(5).velikost().šířka(); // více kódu, který pracuje s theWidth}
Tento druh programovacího konstruktu je velmi běžný a řada programovacích jazyků přidala nějaký druh syntaktický cukr řešit to. Například Apple Rychlý přidal koncept volitelné řetězení v prohlášení if[5] zatímco Microsoft C# 6,0 a Visual Basic 14 přidal null-podmíněné operátory ?.
a ?[
pro přístup členů a indexování.[6][7][8] Základní myšlenkou je umožnit řetězci volání metod okamžité vrácení hodnoty null, pokud některý z jejích členů má hodnotu null, takže například:
šířka = Okna("Hlavní")?.pohledy(5)?.velikost.šířka;
by přiřadil null šířka
pokud chybí buď „Hlavní“, nebo pátý dílčí pohled, nebo vyplňte příkaz a vraťte šířku, pokud jsou obě platné. Existuje mnoho případů, kdy programátor chce v těchto dvou případech provést různá opatření, takže Swift přidává pro tuto roli další formu syntaktického cukru, pokud nechám
prohlášení, známé také jako „volitelná vazba“:
-li nechat pohled = Okna("Hlavní")?.pohledy(5) { // dělat věci s vědomím, že pohled existuje ... šířka = pohled.velikost.šířka}
Viz také
- Sliby, technika vyhýbání se pyramidě zkázy, např. použitý v JavaScriptu[9]
- Demeterův zákon
- Provozovatel bezpečné navigace, operátor programovacího jazyka, který umožňuje vyhnout se pyramidě zkázy
Reference
- ^ Dave Herman (14. prosince 2011). „Proč nebudou coroutiny na webu fungovat“. Malý kalkulačka. Archivováno z původního dne 2016-03-06.
- ^ „The Pyramid of Doom: a JavaScript Style Trap“. 27. listopadu 2012. Archivovány od originál dne 09.12.2015.
- ^ Eberhardt, Colin (8. prosince 2014). „Strhávání Swiftovy volitelné pyramidy zkázy“. Archivováno z původního dne 2016-07-31.
- ^ „Nové jazykové funkce v jazyce Visual Basic 14“. 9. prosince 2014. Archivováno z původního dne 2014-12-25.
- ^ „Volitelné řetězení“. Jablko.
- ^ "Null-conditional Operators (C # and Visual Basic)". Microsoft.
- ^ „Co je nového ve Visual C #“. Microsoft.
- ^ „Co je nového v jazyce Visual Basic“. Microsoft.
- ^ Joe Zimmerman (28. března 2013). „Jaký je smysl slibů?“. telerik.com.