Moderní tvorba webových aplikací

O webu

Pravidlo dvou

Jak používat pravidlo dvou pro efektivní psaní dobrého kódu

3 minuty

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

  1. Poprvé – klidně duplikuj. Udrž kód čitelný, pojmenuj věci srozumitelně a zbytečně nezobecňuj.
  2. 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

CMS založené na Gitu

K čemu jsou dobré redakční systémy postavené na Gitu.

10 minut

Kolik monitorů potřebujete pro vývoj webů?

Jakou konfiguraci monitorů zvolit pro co nejefektivnější vývoj webů.

9 minut

Prázdný řádek na konci souboru

Proč by textové soubory měly končit prázdným řádkem.

3 minuty

Jak používat git rebase

Proč a jak používat git rebase pro přehlednou historii v Gitu.

5 minut

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025