По-просто, ако изразите неизменно означават по-чист JavaScript код.
Условните изрази са съществена част от JavaScript. Те ви позволяват да изпълнявате код въз основа на това дали дадено условие е вярно или невярно и можете да влагате множество иначе ако изявления (и ан друго), за да оцените повече от едно условие.
Но тук е проблемът - когато пишете сложно ако...друго вериги, нещата могат бързо да се объркат и лесно можете да се окажете с код, който е труден за четене и разбиране.
Нека се научим как да преработваме дълго и сложно ако...иначе ако...иначе условни вериги в по-сбита, по-чиста и по-лесна за разбиране версия.
Комплекс ако...друго Вериги
Когато пишете сложни изрази if...else в JavaScript, е важно да пишете чист, кратък и разбираем код. Например, разгледайте ако...друго условна верига във функцията по-долу:
функцияcanDrink(човек) {
ако(лице?.възраст != нула) {
ако(човек.възраст < 18) {
конзола.log(„Все още твърде млад“)
} другоако(person.age < 21) {
конзола.log(„Не в САЩ“)
} друго {
конзола.log(„Разрешено за пиене“)
}
} друго {
конзола.log("Ти не си човек")
}
}конст човек = {
възраст: 22
}
canDrink (човек)
Логиката тук е проста. Първият ако изявлението гарантира, че човек обектът има възраст собственост (в противен случай той или тя не е лице). Вътре в това ако блок, добавихте ако...друго...ако верига, която основно казва:
Ако човекът е под 18 години, той е твърде млад, за да получи питие. Ако са по-млади от 21 години, те все още са под законовата възраст за пиене в Съединените щати. В противен случай те могат законно да получат питие.
Въпреки че горният код е валиден, влагането затруднява разбирането на кода. За щастие можете да преработите кода, за да бъде кратък и по-лесен за четене, като използвате a охранителна клауза.
Гвардейски клаузи
Всеки път, когато имате ако оператор, който обвива целия ви код, можете да използвате a охранителна клауза за да премахнете цялото влагане:
функцияcanDrinkBetter() {
ако(лице?.възраст == нула) връщанеконзола.log("Ти не си човек")
ако(човек.възраст < 18) {
конзола.log(„Все още твърде млад“)
} другоако(person.age < 21) {
конзола.log(„Не в САЩ“)
} друго {
конзола.log(„Разрешено за пиене“)
}
}
В началото на функцията дефинирахте защитна клауза, заявяваща, че ако това конкретно условие не е изпълнено, искате да излезете от canDrinkBetter() функционира незабавно (и регистрирайте „Вие не сте човек“ на конзолата).
Но ако условието е изпълнено, вие оценявате ако...друго верига, за да видите кой блок е приложим. Изпълнението на кода ви дава същия резултат като първия пример, но този код е по-лесен за четене.
Не използвайте еднократно връщане
Може да възразите, че горната техника не е добър принцип на програмиране защото използваме множество връщания в една и съща функция и вие смятате, че е по-добре да имаме само един оператор за връщане (известен още като политика за единично връщане).
Но това е ужасен начин за писане на код, защото ви принуждава да попаднете в същите луди ситуации на влагане, които видяхме в първия примерен код.
С това казано, можете да използвате няколко връщане изрази за допълнително опростяване на вашия код (и премахване на влагането):
функцияcanDrinkBetter() {
ако(лице?.възраст == нула) връщанеконзола.log("Ти не си човек")ако(човек.възраст < 18) {
конзола.log(„Все още твърде млад“)
връщане
}ако(човек.възраст < 21) {
конзола.log(„Не в САЩ“)
връщане
}
конзола.log(„Разрешено за пиене“)
}
Този код работи по същия начин като двата предишни примера и е малко по-чист.
Функции за извличане на по-чист код
Последният ни кодов блок беше по-чист от първите два, но все още не е толкова добър, колкото би могъл да бъде.
Вместо да има дълъг ако...друго верига вътре в една функция, можете да създадете отделна функция canDrinkResult() който прави проверката вместо вас и връща резултата:
функцияcanDrinkResult(възраст) {
ако(възраст < 18) връщане„Все още твърде млад“
ако(възраст < 21) връщане„Не в САЩ“
връщане„Разрешено за пиене“
}
След това вътре в основната функция всичко, което трябва да направите, е първо да приложите клаузата guard, преди да извикате canDrinkResult() функция (с възрастта като неин параметър), за да получите резултата:
функцияcanDrinkBetter() {
ако(лице?.възраст == нула) връщанеконзола.log("Ти не си човек")
позволявам резултат = canDrinkResult (person.age)
конзола.log (резултат)
}
Така че в този случай вие сте делегирали задачата за проверка на възрастта за пиене на отделна функция и сте я извикали само когато е необходимо. Това прави вашия код кратък и по-лесен за работа от всички предишни примери.
Пазете друго от условни изрази
Научихте как да преработвате сложни, вложени условни вериги в по-къси, по-лесни за четене, като използвате предпазни клаузи и техниката за извличане на функция.
Опитайте се да запазите друго израз далеч от вашите условни изрази, доколкото е възможно, като използвате както предпазни клаузи, така и техниката за извличане на функция.
Ако все още не сте запознати с използването на JavaScript ако...друго твърдение, започнете с основите.