Jednodušší, pokud příkazy vždy znamenají čistší kód JavaScript.
Podmíněné příkazy jsou nezbytnou součástí JavaScriptu. Umožňují vám spouštět kód na základě toho, zda je daná podmínka pravdivá nebo nepravdivá, a můžete jich vnořit více jinakif prohlášení (a jiný) k vyhodnocení více než jedné podmínky.
Ale tady je problém – když píšete složitě kdyby...jinak řetězců, věci se mohou rychle zamotat a snadno můžete skončit s kódem, který je obtížně čitelný a pochopitelný.
Pojďme se naučit, jak refaktorovat dlouho a složitě kdyby...jinak...jinak podmíněné řetězce do stručnější, čistší a srozumitelnější verze.
Komplexní když...jinak Řetězy
Při psaní složitých příkazů if...else v JavaScriptu je nezbytné, abyste psali čistý, stručný a srozumitelný kód. Podívejte se například na kdyby...jinak podmíněný řetězec uvnitř funkce níže:
funkcecanDrink(osoba) {
-li(osoba?.věk != nula) {
-li(osoba.stáří < 18) {
řídicí panel.log("Ještě příliš mladý")
} jiný-li(věk osoby < 21) {
řídicí panel.log("Ne v USA")
} jiný {
řídicí panel.log("Povoleno pít")
}
} jiný {
řídicí panel.log("Nejsi člověk")
}
}konst osoba = {
věk: 22
}
candrink (osoba)
Logika je zde jednoduchá. První -li prohlášení zajišťuje, že osoba objekt má stáří majetek (jinak to není osoba). Uvnitř toho -li blok, přidali jste kdyby...jinak...kdyby řetěz, který v podstatě říká:
Pokud je osoba mladší 18 let, je příliš mladá na to, aby se napila. Pokud je jim méně než 21, jsou stále pod hranicí zákonného věku pro pití ve Spojených státech. Jinak se mohou legálně napít.
I když je výše uvedený kód platný, vnoření ztěžuje pochopení kódu. Naštěstí můžete kód refaktorovat tak, aby byl stručný a snáze čitelný pomocí a strážní doložka.
Strážní klauzule
Kdykoli máte -li příkaz, který obaluje celý váš kód, můžete použít a strážní doložka pro odstranění všech vnoření:
funkcecanDrinkBetter() {
-li(osoba?.věk == nula) vrátit seřídicí panel.log("Nejsi člověk")
-li(osoba.stáří < 18) {
řídicí panel.log("Ještě příliš mladý")
} jiný-li(věk osoby < 21) {
řídicí panel.log("Ne v USA")
} jiný {
řídicí panel.log("Povoleno pít")
}
}
Na začátku funkce jste definovali ochrannou klauzuli, která uvádí, že pokud tato konkrétní podmínka není splněna, chcete ukončit canDrinkBetter() okamžitě fungovat (a zaznamenat do konzole „Nejste člověk“).
Ale pokud je podmínka splněna, vyhodnotíte kdyby...jinak řetěz, abyste viděli, který blok je použitelný. Spuštěním kódu získáte stejný výsledek jako v prvním příkladu, ale tento kód je snáze čitelný.
Nepoužívejte jednorázové vrácení
Můžete namítnout, že výše uvedená technika není a dobrý princip programování protože ve stejné funkci používáme více návratů a vy věříte, že je lepší mít pouze jeden příkaz return (aka, single return policy).
Ale to je hrozný způsob psaní kódu, protože vás to nutí do stejných šílených situací vnoření, jaké jsme viděli v první ukázce kódu.
Díky tomu můžete použít více vrátit se příkazy pro další zjednodušení kódu (a zbavení se vnoření):
funkcecanDrinkBetter() {
-li(osoba?.věk == nula) vrátit seřídicí panel.log("Nejsi člověk")-li(osoba.stáří < 18) {
řídicí panel.log("Ještě příliš mladý")
vrátit se
}-li(osoba.stáří < 21) {
řídicí panel.log("Ne v USA")
vrátit se
}
řídicí panel.log("Povoleno pít")
}
Tento kód funguje stejně jako dva předchozí příklady a je také o něco čistší.
Extrahujte funkce pro kód čističe
Náš poslední blok kódu byl čistší než první dva, ale stále není tak dobrý, jak by mohl být.
Místo dlouhého kdyby...jinak řetěz uvnitř jedné funkce, můžete vytvořit samostatnou funkci canDrinkResult() to provede kontrolu za vás a vrátí výsledek:
funkcecanDrinkResult(stáří) {
-li(věk < 18) vrátit se"Ještě příliš mladý"
-li(věk < 21) vrátit se"Ne v USA"
vrátit se"Povoleno pít"
}
Pak v hlavní funkci vše, co musíte udělat, je nejprve použít ochrannou klauzuli před voláním funkce canDrinkResult() funkce (s věkem jako parametrem) pro získání výsledku:
funkcecanDrinkBetter() {
-li(osoba?.věk == nula) vrátit seřídicí panel.log("Nejsi člověk")
nechat výsledek = canDrinkResult (osoba.věk)
řídicí panel.log (výsledek)
}
V tomto případě jste tedy úkol kontroly věku pití delegovali na samostatnou funkci a zavolali jste ji pouze v případě potřeby. Díky tomu je váš kód stručný a snáze se s ním pracuje než se všemi předchozími příklady.
Uchovávejte jinde mimo podmíněné příkazy
Naučili jste se refaktorovat složité, vnořené podmíněné řetězce do kratších, snáze čitelných řetězců pomocí ochranných klauzulí a techniky extrakce funkcí.
Pokuste se udržet jiný prohlášení co nejvíce od vašich podmíněných podmínek použitím jak ochranných klauzulí, tak techniky extrakce funkcí.
Pokud s používáním JavaScriptu ještě začínáte kdyby...jinak prohlášení, začněte se základy.