Jednostavnije ako izjave neizbježno znače čišći JavaScript kôd.
Uvjetni iskazi bitan su dio JavaScripta. Omogućuju vam izvršavanje koda na temelju toga je li dani uvjet istinit ili lažan, a možete ih ugnijezditi više elseif izjave (i an drugo) za procjenu više od jednog uvjeta.
Ali ovdje je problem - kada pišete složeno ako...drugo lanaca, stvari mogu brzo postati neuredne i lako možete završiti s kodom koji je teško čitati i razumjeti.
Naučimo kako dugo i složeno refaktorirati ako... inače ako... inače uvjetne lance u sažetiju, čišću i lakše razumljivu verziju.
Složeno ako...drugo Lanci
Kada pišete složene if...else izjave u JavaScriptu, bitno je da pišete čist, koncizan i razumljiv kod. Na primjer, pogledajte ako...drugo uvjetni lanac unutar donje funkcije:
funkcijamožePiti(osoba) {
ako(osoba?.dob != ništavan) {
ako(osoba.dob < 18) {
konzola.log("Još uvijek premlad")
} drugoako(osoba.dob < 21) {
konzola.log("Ne u SAD-u")
} drugo {
konzola.log("Dopušteno piti")
}
} drugo {
konzola.log("Ti nisi osoba")
}
}konst osoba = {
dob: 22
}
može piti (osoba)
Logika je ovdje jednostavna. Prvi ako izjava osigurava da osoba objekt ima dob vlasništvo (inače on ili ona nije osoba). Unutar toga ako blok, dodali ste ako... inače... ako lanac koji u osnovi kaže:
Ako je osoba mlađa od 18 godina, premlada je za piće. Ako su mlađi od 21 godine, još uvijek su ispod zakonske dobi za konzumaciju alkohola u Sjedinjenim Državama. Inače, mogu legalno dobiti piće.
Iako je gornji kod valjan, ugniježđenje vam otežava razumijevanje koda. Srećom, možete refaktorirati kod da bude sažet i lakši za čitanje pomoću a stražarska klauzula.
Stražarske klauzule
Kad god imate ako naredbu koja obavija cijeli vaš kod, možete koristiti a stražarska klauzula za uklanjanje svih ugniježđenja:
funkcijacanDrinkBetter() {
ako(osoba?.dob == ništavan) povratakkonzola.log("Ti nisi osoba")
ako(osoba.dob < 18) {
konzola.log("Još uvijek premlad")
} drugoako(osoba.dob < 21) {
konzola.log("Ne u SAD-u")
} drugo {
konzola.log("Dopušteno piti")
}
}
Na početku funkcije definirali ste zaštitnu klauzulu koja kaže da ako taj specifični uvjet nije ispunjen, želite izaći iz može piti bolje() funkcionirati odmah (i zapisati "Ti nisi osoba" na konzoli).
Ali ako je uvjet ispunjen, vi procjenjujete ako...drugo lanac da vidite koji je blok primjenjiv. Pokretanje koda daje isti rezultat kao i prvi primjer, ali je ovaj kod lakši za čitanje.
Nemojte koristiti samo jedan povrat
Mogli biste tvrditi da gornja tehnika nije dobar princip programiranja jer koristimo višestruke povrate u istoj funkciji, a vi vjerujete da je bolje imati samo jednu povratnu naredbu (poznata i kao politika jednog vraćanja).
Ali ovo je užasan način pisanja koda jer vas tjera u iste lude situacije gniježđenja koje smo vidjeli u prvom uzorku koda.
Uz to, možete koristiti više povratak izjave za daljnje pojednostavljenje vašeg koda (i uklanjanje gniježđenja):
funkcijacanDrinkBetter() {
ako(osoba?.dob == ništavan) povratakkonzola.log("Ti nisi osoba")ako(osoba.dob < 18) {
konzola.log("Još uvijek premlad")
povratak
}ako(osoba.dob < 21) {
konzola.log("Ne u SAD-u")
povratak
}
konzola.log("Dopušteno piti")
}
Ovaj kod radi isto kao i prethodna dva primjera, a također je malo čišći.
Ekstrakt funkcija za čistiji kod
Naš posljednji blok koda bio je čišći od prva dva, ali još uvijek nije onoliko dobar koliko bi mogao biti.
Umjesto da ima dugu ako...drugo lanac unutar jedne funkcije, možete stvoriti zasebnu funkciju canDrinkResult() koji radi provjeru umjesto vas i vraća rezultat:
funkcijacanDrinkResult(dob) {
ako(dob < 18) povratak"Još uvijek premlad"
ako(dob < 21) povratak"Ne u SAD-u"
povratak"Dopušteno piti"
}
Zatim unutar glavne funkcije, sve što trebate učiniti je prvo primijeniti klauzulu čuvara prije pozivanja canDrinkResult() (s godinama kao parametrom) da biste dobili rezultat:
funkcijacanDrinkBetter() {
ako(osoba?.dob == ništavan) povratakkonzola.log("Ti nisi osoba")
neka rezultat = canDrinkResult (osoba.dob)
konzola.log (rezultat)
}
Dakle, u ovom slučaju delegirali ste zadatak provjere starosti za piće zasebnoj funkciji i pozvali je samo kada je to bilo potrebno. To čini vaš kod sažetijim i jednostavnijim za rad od svih prethodnih primjera.
Držite se podalje od uvjetnih naredbi
Naučili ste kako složene, ugniježđene uvjetne lance refaktorirati u kraće, lakše čitljive pomoću zaštitnih klauzula i tehnike ekstrakcije funkcije.
Pokušajte zadržati drugo naredbu što je više moguće udaljite od svojih uvjeta korištenjem zaštitnih klauzula i tehnike izdvajanja funkcije.
Ako ste još uvijek novi u korištenju JavaScripta ako...drugo izjavu, počnite s osnovama.