JS Refactoring Combo:Nahraďte vnořené If-Else chrániče

Vnořené příkazy if-else mohou zbytečně komplikovat zdůvodňování různých cest provádění a výsledků funkce . Výsledkem může být ztráta produktivity a zavádění chyb v důsledku nedorozumění.

V těchto situacích může pomoci refaktoring „Nahradit vnořené podmíněné podmínky ochrannými klauzulemi“ z knihy Martina Fowlera „Refaktoring – Improving the Design of Existing Code (2nd Edition)“.

ochranná doložka zkontroluje podmínku a vrátí z funkce, pokud je podmínka pravdivá, případně provede nějaké výpočty a vrátí výsledek. Usnadňuje uvažování o funkci předčasným ukončením jedné cesty provádění.

Zde je příklad funkce (od Nahradit vnořené podmíněné s ochrannými klauzulemi, Martin Fowler) před refaktorováním:

function getPayAmount() {
  let result;
  if (isDead)
    result = deadAmount();
  else {
    if (isSeparated)
      result = separatedAmount();
    else {
      if (isRetired)
        result = retiredAmount();
      else
        result = normalPayAmount();
    }
  }
  return result;
}

V tomto příkladu tři vnořené příkazy if-else kontrolují různé podmínky (např. isSeparated ) a aktualizujte proměnnou result . Proměnná je vrácena na konci funkce.

Cílem je refaktorovat funkci do následující verze:

function getPayAmount() {
  if (isDead) return deadAmount();
  if (isSeparated) return separatedAmount();
  if (isRetired) return retiredAmount();
  return normalPayAmount();
}

Refaktorovaná funkce používá ochranné klauzule namísto vnořených příkazů if-else. Proměnná result již není potřeba a byl odstraněn. Refaktorovaný kód je snáze srozumitelný, protože je zde méně stavu (žádná proměnná) a každá cesta provedení se vrací brzy.

Jak lze původní funkci refaktorovat krok za krokem?

Původní kód můžete zjednodušit použitím dvou refaktoringů na každou podmínku:

  • Inline return převede přiřazení proměnné na příkaz return. Takový převod je možný, když následující příkaz po přiřazení v řídicím toku vrátí proměnnou.
  • Převeďte if-else na ochrannou klauzuli změní příkaz if-else na return příkazy uvnitř do to guard klauzule, odstranění odsazení kolem bloku else.

Tyto kroky můžete provést ručně nebo pomocí automatizace. P42 JavaScript Assistant for VS Code je refaktorovací nástroj, který podporuje obě operace. P42 označuje příležitosti ke zlepšení s modrým klikatým podtržením. S automatizací refactoringu lze kód vylepšit během několika sekund . Po posledním kroku formátování byla funkce přepracována do zjednodušené verze.

Zde je návod, jak refaktorování kódu vypadá ve VS Code s P42:

Refaktoring je nezbytný pro udržení zdravé kódové základny a mnoho malých vylepšení jde dlouhou cestu. Zavedením ochranných klauzulí můžete často zjednodušit vnořené příkazy if-else a trochu zlepšit základnu kódu.

Šťastnou refaktorizaci!