
Pravidlo dvou
Jak používat pravidlo dvou pro efektivní psaní dobrého kódu
Jedna z osvědčených zásad psaní kódu je DRY (don’t repeat yourself – česky „neopakuj se“). Znamená to neduplikovat kód stylem copy & paste na více místech v projektu, ale místo toho vyčlenit společné části do universálních funkcí nebo komponent.
Další dobré pravidlo je KISS (keep it simple, stupid – česky „drž to jednoduché“). To jde občas proti DRY, protože prosté zkopírování je někdy mnohem jednodušší než vymýšlení složité abstrakce za každou cenu.
Pravidlo dvou
Osobně se mi osvědčilo pravidlo dvou: jednorázové vědomé duplikování je v pořádku. Společnou abstrakci vytvářím až ve chvíli, kdy stejný kód potřebuji podruhé (tj. reálně by byl v projektu už na 3 místech).
Tím se předejde předčasné optimalisaci a zbytečné ztrátě času v době, kdy ještě není jasné, jakým směrem se vývoj vydá.
Často se navíc ukáže, že domněle „společná“ logika má v detailech rozdílné požadavky a sdílená abstrakce by další rozvoj spíš brzdila.
Proč to funguje
- Neabstrahuje se naslepo – kód je ověřen dvěma nezávislými použitími.
- Menší risiko překomplikování – vyhýbá se nadměrně obecnému návrhu.
- Rychlejší doručení hodnoty – první implementace je jednoduchá, rychlá a srozumitelná.
- Lepší ergonomie – skutečné potřeby se ukážou až po druhém použití.
Jak postupovat
- Poprvé – klidně duplikuj. Udrž kód čitelný, pojmenuj věci srozumitelně a zbytečně nezobecňuj.
- Podruhé – refaktoruj. Vytvoř společnou funkci/modul/komponentu, přesuň duplicitní části.
Určitě ale není nutné se tím řídit vždy a existují případy, kdy může dávat smysl se duplikování bránit už od počátku. Například, kdy je dodržení DRY málo pracné nebo dokonce jednodušší na vývoj/testování.
Příklad: duplikace → extrakce
Poprvé – jednoduchá duplicita:
async function saveUser(user) {
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user)
});
return res.json();
}
async function saveOrder(order) {
const res = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(order)
});
return res.json();
}
Podruhé – extrakce společného kódu:
async function postJson(url, data) {
const res = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (!res.ok) throw new Error('Request failed');
return res.json();
}
const saveUser = (user) => postJson('/api/users', user);
const saveOrder = (order) => postJson('/api/orders', order);
Závěr
Nechť DRY zůstane cílem, ne dogmatem. Pravidlo dvou dává praktické vodítko: duplikuj jednou, abstrahuj podruhé. Jednoduché, čitelné – a zpravidla nejrychlejší cesta k udržitelnému kódu.
Související články


Kolik monitorů potřebujete pro vývoj webů?
Jakou konfiguraci monitorů zvolit pro co nejefektivnější vývoj webů.

