Једноставнији иф искази увек значе чистији ЈаваСцрипт код.
Условне изјаве су суштински део ЈаваСцрипт-а. Они вам омогућавају да извршите код на основу тога да ли је дати услов тачан или нетачан, а можете да угнездите вишеструки услов елсеиф изјаве (и ан друго) за процену више услова.
Али ево проблема - када пишете сложено ако друго ланци, ствари се брзо могу забрљати и лако можете завршити са кодом који је тешко читати и разумети.
Хајде да научимо како да рефакторишемо дуго и сложено ако... друго ако... друго условне ланце у сажетију, чистију и лакшу за разумевање верзију.
Сложени ланци ако...друго
Када пишете сложене иф...елсе изјаве у ЈаваСцрипт-у, битно је да пишете чист, концизан и разумљив код. На пример, погледајте ако друго условни ланац унутар функције испод:
функцијацанДринк(особа) {
ако(особа?.старост != нула) {
ако(особа.аге < 18) {
конзола.Пријава("Још увек сувише млад")
} другоако(особа.старост < 21) {
конзола.Пријава("Не у САД")
} друго {
конзола.Пријава("Дозвољено пити")
}
} друго {
конзола.Пријава("Ти ниси особа")
}
}конст особа = {
године: 22
}
цанДринк (особа)
Логика је овде једноставна. Први ако изјава осигурава да се особа објекат има старости имовине (иначе он или она није особа). Унутар тога ако блок, додали сте ако...друго...ако ланац који у основи каже:
Ако је особа млађа од 18 година, она је премлада да би добила пиће. Ако су млађи од 21 године, још увек су испод законске старосне границе за пиће у Сједињеним Државама. У супротном, могу легално да добију пиће.
Иако је горњи код важећи, угнежђење вам отежава разумевање кода. Срећом, можете рефакторисати код да буде концизан и лакши за читање помоћу а заштитна клаузула.
Заштитне клаузуле
Кад год имате ако изјаву која обмотава сав ваш код, можете користити а заштитна клаузула да бисте уклонили све гнеждење:
функцијацанДринкБеттер() {
ако(особа?.старост == нула) повратакконзола.Пријава("Ти ниси особа")
ако(особа.аге < 18) {
конзола.Пријава("Још увек сувише млад")
} другоако(особа.старост < 21) {
конзола.Пријава("Не у САД")
} друго {
конзола.Пријава("Дозвољено пити")
}
}
На почетку функције дефинисали сте заштитну клаузулу у којој се наводи да ако тај специфични услов није испуњен, желите да изађете из цанДринкБеттер() одмах функционишу (и запишите „Ви нисте особа“ на конзоли).
Али ако је услов испуњен, процењујете ако друго ланац да видите који блок је применљив. Покретање кода даје вам исти резултат као и први пример, али овај код је лакши за читање.
Немојте користити један поврат
Можете тврдити да горња техника није а добар принцип програмирања јер користимо вишеструке поврате у истој функцији, а ви верујете да је боље имати само једну повратну изјаву (ака, једнократна политика враћања).
Али ово је ужасан начин за писање кода јер вас тера у исте луде ситуације гнежђења које смо видели у првом узорку кода.
Уз то, можете користити више повратак изјаве да додатно поједноставите ваш код (и да се ослободите угнежђења):
функцијацанДринкБеттер() {
ако(особа?.старост == нула) повратакконзола.Пријава("Ти ниси особа")ако(особа.аге < 18) {
конзола.Пријава("Још увек сувише млад")
повратак
}ако(особа.аге < 21) {
конзола.Пријава("Не у САД")
повратак
}
конзола.Пријава("Дозвољено пити")
}
Овај код ради исто као и претходна два примера, а такође је и мало чистији.
Екстракт функције за чистији код
Наш последњи блок кода био је чистији од прва два, али још увек није тако добар колико би могао да буде.
Уместо дугог ако друго ланац унутар једне функције, можете креирати засебну функцију цанДринкРесулт() то ради проверу уместо вас и враћа резултат:
функцијацанДринкРесулт(старости) {
ако(старост < 18) повратак"Још увек сувише млад"
ако(старост < 21) повратак"Не у САД"
повратак"Дозвољено пити"
}
Затим унутар главне функције, све што треба да урадите је да прво примените заштитну клаузулу пре него што позовете цанДринкРесулт() функцију (са узрастом као параметром) да бисте добили резултат:
функцијацанДринкБеттер() {
ако(особа?.старост == нула) повратакконзола.Пријава("Ти ниси особа")
дозволити резултат = цанДринкРесулт (особа.старост)
конзола.лог (резултат)
}
Дакле, у овом случају сте делегирали задатак провере старости за пиће у посебну функцију и позвали је само када је потребно. Ово чини ваш код сажетим и једноставнијим за рад од свих претходних примера.
Остало држите даље од условних изјава
Научили сте како да преформулишете сложене, угнежђене условне ланце у краће, лакше читљиве користећи заштитне клаузуле и технику екстракције функције.
Покушајте да задржите друго Удаљите се од ваших условних израза што је више могуће користећи обе заштитне клаузуле и технику екстракције функције.
Ако сте још увек нови у коришћењу ЈаваСцрипт-а ако друго изјаву, почните са основама.