Vrátiť skorý vzor

Blog

Obrázok k príspevku



Keď som sa dozvedel o programovaní, základným myšlienkovým procesom, ktorý som mal pri vytváraní funkcie, bolo overenie zodpovedajúcich požiadaviek, kým sa nedosiahol výsledok.

public String returnStuff(SomeObject argument1, SomeObject argument2) { if (argument1.isValid()) { if (argument2.isValid()) { SomeObject otherVal1 = doSomeStuff(argument1, argument2) if (otherVal1.isValid()) { SomeObject otherVal2 = doAnotherStuff(otherVal1) if (otherVal2.isValid()) { return 'Stuff'; } else { throw new Exception(); } } else { throw new Exception(); } } else { throw new Exception(); } } else { throw new Exception(); } }

Čo je možné pri tomto prístupe pozorovať?



  • Nelineárny tok kódu je ťažké sledovať kvôli vnoreným podmienkam.
  • Je ťažké zistiť zodpovedajúce ďalšie položky pre každý if_ _, čo spôsobuje, že spracovanie chýb je mätúce pri čítaní, najmä ak je blok if veľký.
  • Na nájdenie očakávaného pozitívneho výsledku je potrebné sledovať tok kódu a prechádzať vnorenými príkazmi if.
  • Kvôli tomuto príkladu sa na inom mieste udeľuje výnimka. Ak ostatné neukončí spustenie, vykoná zvyšok kódu. To môže viesť k zbytočným chybám.

Obsahuje tiež niekoľko anti-vzorov:

  • Inak je považovaný za zapáchajúci . Keď je stav komplikovaný, ostatné je dvakrát, pretože čitateľ ho musí prevrátiť; Keď je blok if veľký, je ľahké na stav zabudnúť; Vnorené Ak a inak zamieňa čitateľa.
  • Šípkový vzor je to vtedy, keď sa kód začne tvarovať ako šípka kvôli vnoreným podmienkam a slučkám.

Návrat skoro

Pokúsme sa refaktorovať kód s iným zmýšľaním.



počítadlo animovaných čísel html

Návrat včas je spôsob písania funkcií alebo metód tak, že očakávaný pozitívny výsledok sa vráti na konci funkcie a zvyšok kódu ukončí vykonanie (vrátením alebo vyvolaním výnimky), ak nie sú splnené podmienky.

To sa dosiahne vrátením podmienok if, vykonaním potrebného spracovania chýb a vrátením alebo vyvolaním adekvátnej výnimky, dokončením vykonávania funkcie.

public String returnStuff(SomeObject argument1, SomeObject argument2){ if (!argument1.isValid()) { throw new Exception(); } if (!argument2.isValid()) { throw new Exception(); } SomeObject otherVal1 = doSomeStuff(argument1, argument2); if (!otherVal1.isValid()) { throw new Exception(); } SomeObject otherVal2 = doAnotherStuff(otherVal1); if (!otherVal2.isValid()) { throw new Exception(); } return 'Stuff'; }

Tu je možné pozorovať niekoľko vecí:

  • Kód má iba jednu úroveň odsadenia. Je možné ho čítať lineárne.
  • Očakávaný pozitívny výsledok je možné rýchlo nájsť na konci funkcie.
  • Pri použití tohto myšlienkového postupu sa viac zameriavame na prvé nájdenie chýb a bezpečné zavedenie obchodnej logiky neskôr, čím sa zabráni zbytočným chybám.
  • Použité myslenie zamerané na zlyhanie je podobné ako Testom riadený vývoj , čo uľahčuje testovanie kódu.
  • Funkcia sa okamžite skončí chybami, čím sa zabráni možnosti vykonania väčšieho kódu bez úmyslu.

Dizajnové vzory

Pri použití metódy skorého návratu sa postupuje podľa nasledujúcich vzorov.

ubuntu oh my zsh

Zlyhajte rýchlo

Jim Shore a Martin Fowler vytvorili koncept Zlyhajte rýchlo v roku 2004. Tento koncept je základom pravidla pre skorý návrat. Kód rýchlo zlyháva, ale je robustnejší z dôvodu počiatočného zamerania pri hľadaní podmienok, kde sa môže spustenie kódu ukončiť. Vďaka tomuto prístupu je možné chyby ľahšie nájsť a opraviť.

Ochranná doložka

Ochranná doložka je jednoducho kontrola (invertovaná if), ktorá okamžite ukončí funkciu, a to buď pomocou príkazu return alebo výnimky. Pomocou ochranných doložiek sa identifikujú možné chybové prípady a príslušný postup sa uskutoční vrátením alebo vyhodením adekvátnej výnimky.

Šťastnú cestu

Obrázok k príspevku

Šťastná cesta k funkcii by bola tam, kde žiadna z nich validačné pravidlá vyvolá chybu, čím nechá realizáciu úspešne pokračovať až do konca, čo vyvolá pozitívnu odpoveď.

ako nájsť kód odkazu v mojom roku tv

Použitím metódy return early, kód sa číta lineárne, čím sa odhalí šťastná cesta . Pomocou tohto vzoru nie je potrebné strácať čas sledovaním toku kódu, aby ste sa dostali k cieľu. Je možné použiť svalová pamäť nájsť to.

Vzorec odrážadla

The odrážadlový vzor je metóda na overenie určitých podmienok buď vrátením alebo vyvolaním výnimky. Je to obzvlášť užitočné, ak je overovací kód zložitý a môže byť použitý vo viacerých scenároch. Dopĺňa vzor skorého návratu.

private void validateArgument1(SomeObject argument1){ if(!argument1.isValid()) { throw new Exception(); } if(!argument2.isValid()) { throw new Exception(); } } public void doStuff(String argument1) { validateArgument1(argument1); // do more stuff }

Nevýhody

Napriek tomu, že prístup včasného návratu má kladné body, má aj niekoľko spravodlivých kritík, ktoré budú teraz odhalené.

Funkcie by mali mať iba jeden výstupný bod

Toto pravidlo kódovania pochádza z roku Štruktúrované programovanie Dijkstra . Tento pojem Single Entry, Single Exit (SESE) pochádza z jazykov s explicitným riadením zdrojov, ako je C a Assembly.

V jazykoch, v ktorých zdroje nie sú alebo by nemali byť spravované ručne, nemá veľký význam zachovávať starú konvenciu. SESE často robí kód zložitejším. Je to dinosaurus, ktorý (okrem C) nepasuje dobre do väčšiny dnešných jazykov. Namiesto toho, aby pomohol zrozumiteľnosti kódu, prekáža mu.

generátor šablón mriežky

Čistenie zdrojov

Jazyky na vysokej úrovni, ako napríklad Java a C ##, majú g zber odpadu , ale niekedy je stále potrebné niektoré zdroje spravovať ručne. Našťastie novšie jazyky majú nasledujúce koncepty:

  • Skúste, chyťte a nakoniec príkazy umožňujú použitie zdroja, zachytenie všetkých možných výnimiek a následné uvoľnenie zdroja v poslednom bloku, pričom sa uistite, že nedochádza k únikom pamäte.
  • The použitím príkaz povoľuje použitie zdroja vo vnútri bloku a automaticky ho zlikviduje po použití, aj keď je ukončenie spôsobené predčasne.

Tieto koncepty umožňujú použitie pravidla návratu na začiatku a zároveň disponujú prostriedkami použitými na ukončenie vykonávania funkcie.

Protokolovanie a ladenie

Jeden argument je, že ladenie jedného jediného návratu je jednoduchšie, pretože je potrebné pridať iba jeden bod prerušenia, aby sa zachytili všetky výstupy z funkcie, a je jednoduchšie sa prihlásiť, pretože vyžaduje iba protokol na konci. Nie je to nevyhnutne pravda.

Pomocou metódy včasného návratu je možné výnimky vhodiť správnym spôsobom. Ladenie je oveľa jednoduchšie, ak je zrejmý dôvod, prečo kód zlyhá. Denník je možné pridať aj pred každým ukončením, aby bol vývojár lepšie informovaný. Ak je potrebné zaznamenať všetky východy, v prípade viacnásobných návratových príkazov je možné prihlásiť sa po získaní hodnoty z príslušnej funkcie.

príklad apache commons csv

Čitateľnosť ovplyvňujú viaceré výstupné body

Funkcia 200 riadkov kódu s rôznymi náhodnými postrekmi nie je skvelý programovací štýl a nie je čitateľný. Takúto funkciu by však nebolo ľahké pochopiť ani bez týchto výnosov. Vzorec odrážadla a metóda extraktu by sa mali používať na udržanie veľkosti funkcie v rozumných medziach.

#vývoj softvéru #softvérové ​​inžinierstvo #učenie sa kódu #programovanie #kódovanie

medium.com

Vrátiť skorý vzor

Pravidlo, vďaka ktorému bude váš kód čitateľnejší.