====== DRY (Don't Repeat Yourself) ====== **DRY** je princip, který říká: „Každý kousek znalosti musí mít v rámci systému jediné, jednoznačné a autoritativní zastoupení.“ Jednoduše řečeno: Pokud píšete stejný kód nebo logiku na více místech, děláte chybu. Jakmile budete chtít tuto logiku změnit, budete ji muset hledat a opravovat na všech těchto místech, což dříve či později povede k opomenutí a vzniku chyb. ---- ====== Jak DRY aplikovat v praxi? ====== ===== 1. Extrakce do funkcí a metod ===== Pokud se v programu opakuje stejný výpočet nebo sekvence příkazů, přesuňte ji do samostatné funkce. Ostatní části kódu pak tuto funkci pouze volají. ===== 2. Využití dědičnosti a kompozice ===== V [[oop|objektově orientovaném programování]] využíváme [[dedicnost|dědičnost]]. Místo abychom u každého zvířete definovali metodu ''dychej()'', definujeme ji jednou v rodičovské třídě ''Zvíře''. ===== 3. Konstanty místo "magických čísel" ===== Nepište v kódu opakovaně sazbu DPH jako ''* 0.21''. Definujte si konstantu ''DPH_SAZBA = 0.21'' na jednom místě. Pokud se zákon změní, upravíte pouze jednu řádku kódu. ---- ====== WET: Opak DRY ====== Když programátor princip DRY nedodržuje, říká se, že kód je **WET** (vtipná zkratka pro **Write Everything Twice** – "napiš všechno dvakrát" nebo **We Enjoy Typing** – "rádi ťukáme do klávesnice"). ^ Vlastnost ^ DRY (Správný přístup) ^ WET (Špatný přístup) ^ | **Údržba** | Snadná (změna na jednom místě). | Těžká (změna na mnoha místech). | | **Čitelnost** | Přehledný a modulární kód. | Dlouhý, nepřehledný "špagetový" kód. | | **Chybovost** | Nízká pravděpodobnost nekonzistence. | Vysoká (zapomenete přepsat jednu kopii). | ---- ====== Pozor na "Over-engineering" ====== Ačkoliv je DRY důležitý, nesmí se to s ním přehánět. Někdy se programátoři snaží za každou cenu spojit dva kousky kódu, které vypadají podobně, ale logicky spolu nesouvisí. Tomu se říká **předčasná abstrakce**. * **Pravidlo tří (Rule of Three):** Pokud kód píšete podruhé, můžete si duplicity všimnout. Teprve když ho píšete **potřetí**, je ten správný čas na jeho refaktorování do společné funkce. ---- ====== Souvislost s ostatními principy ====== DRY úzce spolupracuje s dalšími pravidly: * **KISS (Keep It Simple, Stupid):** Udržuj kód jednoduchý. * **YAGNI (You Ain't Gonna Need It):** Nepiš kód pro funkce, které zatím nepotřebuješ (často v marné snaze o budoucí "DRY"). * **[[solid_principy|SOLID]]:** Zejména princip jedné odpovědnosti (SRP) pomáhá dosáhnout DRY kódu. ---- //Související pojmy: OOP, Refaktorování, SOLID principy, KISS, YAGNI, Dědičnost.//