Vienkāršāk, ja paziņojumi vienmēr nozīmē tīrāku JavaScript kodu.

Nosacītie paziņojumi ir būtiska JavaScript sastāvdaļa. Tie ļauj izpildīt kodu, pamatojoties uz to, vai konkrētais nosacījums ir patiess vai nepatiess, un jūs varat ligzdot vairākus elseif paziņojumi (un an cits), lai novērtētu vairāk nekā vienu nosacījumu.

Bet šeit ir problēma — rakstot sarežģīti ja...citādi ķēdes, lietas var ātri kļūt netīras, un jūs varat viegli nonākt pie koda, kuru ir grūti lasīt un saprast.

Mācīsimies ilgi un sarežģīti refaktorēt ja...citādi...citādi nosacījumu ķēdes kodolīgākā, tīrākā un vieglāk saprotamā versijā.

Sarežģīti ja...citādi Ķēdes

Rakstot sarežģītus if...else paziņojumus JavaScript, ir svarīgi rakstīt tīrs, kodolīgs un saprotams kods. Piemēram, apskatiet ja...citādi nosacījuma ķēde tālāk norādītajā funkcijā:

funkcijuvar Dzert(persona) {
ja(persona?.vecums != null) {
ja(persona.vecums < 18) {
konsole.log("Vēl pārāk jauns")
} citsja(persona.vecums < 21) {
konsole.log("Nav ASV")
} cits {
konsole.log("Atļauts dzert")
}
} cits {
konsole.log("Tu neesi cilvēks")
}
}

konst persona = {
vecums: 22
}

canDrink (persona)

Loģika šeit ir vienkārša. Pirmais ja paziņojums nodrošina, ka persona objektam ir vecums īpašums (citādi viņš vai viņa nav persona). Tajā iekšā ja bloķēt, jūs pievienojāt ja...citādi...ja ķēde, kas būtībā saka:

Ja persona ir jaunāka par 18 gadiem, viņš ir pārāk jauns, lai iedzertu. Ja viņi ir jaunāki par 21 gadu, viņi joprojām ir jaunāki par Amerikas Savienotajās Valstīs atļauto alkohola lietošanas vecumu. Pretējā gadījumā viņi var likumīgi iegūt dzērienu.

Lai gan iepriekš minētais kods ir derīgs, ligzdošanas dēļ jums ir grūtāk saprast kodu. Par laimi, jūs varat pārveidot kodu, lai tas būtu kodolīgs un vieglāk lasāms, izmantojot a aizsargklauzula.

Aizsargu klauzulas

Jebkurā laikā, kad jums ir ja paziņojumu, kas aptver visu jūsu kodu, varat izmantot a aizsargklauzula lai noņemtu visas ligzdas:

funkcijuvar DzertLabāk() {
ja(persona?.vecums == null) atgrieztieskonsole.log("Tu neesi cilvēks")

ja(persona.vecums < 18) {
konsole.log("Vēl pārāk jauns")
} citsja(persona.vecums < 21) {
konsole.log("Nav ASV")
} cits {
konsole.log("Atļauts dzert")
}
}

Funkcijas sākumā jūs definējāt aizsardzības klauzulu, norādot, ka, ja šis konkrētais nosacījums nav izpildīts, vēlaties iziet no var DzertLabāk() funkcija nekavējoties (un konsolē piesakieties "Tu neesi persona").

Bet, ja nosacījums ir izpildīts, jūs novērtējat ja...citādi ķēdi, lai redzētu, kurš bloks ir piemērojams. Palaižot kodu, tiek iegūts tāds pats rezultāts kā pirmajā piemērā, taču šo kodu ir vieglāk nolasīt.

Neizmantojiet vienu atgriešanu

Jūs varētu iebilst, ka iepriekš minētā tehnika nav a labs programmēšanas princips jo mēs izmantojam vairākas atgriešanas vienu un to pašu funkciju, un jūs uzskatāt, ka labāk ir tikai viens atgriešanas paziņojums (aka, vienas atgriešanas politika).

Bet tas ir šausmīgs veids, kā rakstīt kodu, jo tas liek jums nonākt tādās pašās trakās ligzdošanas situācijās, kuras mēs redzējām pirmajā koda paraugā.

Ņemot to vērā, varat izmantot vairākus atgriezties paziņojumus, lai vēl vairāk vienkāršotu kodu (un atbrīvotos no ligzdošanas):

funkcijuvar DzertLabāk() {
ja(persona?.vecums == null) atgrieztieskonsole.log("Tu neesi cilvēks")

ja(persona.vecums < 18) {
konsole.log("Vēl pārāk jauns")
atgriezties
}

ja(persona.vecums < 21) {
konsole.log("Nav ASV")
atgriezties
}

konsole.log("Atļauts dzert")
}

Šis kods darbojas tāpat kā divi iepriekšējie piemēri, un tas ir arī nedaudz tīrāks.

Izvilkšanas funkcijas Cleaner Code

Mūsu pēdējais koda bloks bija tīrāks nekā pirmie divi, taču tas joprojām nav tik labs, kā varētu būt.

Tā vietā, lai būtu ilgi ja...citādi ķēde vienā funkcijā, varat izveidot atsevišķu funkciju varDrinkResult() kas veic pārbaudi jūsu vietā un atgriež rezultātu:

funkcijuvarDrinkResult(vecums) {
ja(vecums < 18) atgriezties"Vēl pārāk jauns"
ja(vecums < 21) atgriezties"Nav ASV"
atgriezties"Atļauts dzert"
}

Pēc tam galvenajā funkcijā viss, kas jums jādara, ir vispirms jāpiemēro aizsardzības klauzula, pirms zvanāt uz varDrinkResult() funkcija (ar vecumu kā parametru), lai iegūtu rezultātu:

funkcijuvar DzertLabāk() { 
ja(persona?.vecums == null) atgrieztieskonsole.log("Tu neesi cilvēks")

ļaut rezultāts = canDrinkResult (person.age)
konsole.log (rezultāts)
}

Tātad šajā gadījumā jūs deleģējāt dzeršanas vecuma pārbaudi atsevišķai funkcijai un izsaucāt to tikai nepieciešamības gadījumā. Tas padara jūsu kodu kodolīgu un vieglāk lietojamu nekā visi iepriekšējie piemēri.

Citādi turiet tālāk no nosacītiem paziņojumiem

Jūs esat iemācījies pārveidot sarežģītas, ligzdotas nosacījumu ķēdes īsākās, vieglāk lasāmās ķēdēs, izmantojot aizsargklauzulas un funkciju ekstrakcijas paņēmienu.

Centieties saglabāt cits pēc iespējas tālāk no nosacījumiem, izmantojot gan aizsargklauzulas, gan funkciju izvilkšanas paņēmienu.

Ja vēl neesat JavaScript lietošanā ja...citādi paziņojumu, sāciet ar pamatiem.