Refaktorisanje uslova do nestanka
Nedavno sam u sklopu redovnog pregleda koda naišao na sledeći primer bespotrebnog if/else uslova, čije uklanjanje prilično dobro oslikava vrednost refaktorisanja.
Primer je dat u programskom jeziku CoffeeScript
, ali rešenje je opšte primenljivo.
Originalni if/else uslov
if checkAll is false
checkAll = true
_.forEach clips, (item) - >
item.DownloadSelected = true
else
checkAll = false
_.forEach clips, (item) - >
item.DownloadSelected = false
Ovde vidimo da oba ishoda imaju zajednički izvršni deo koji je identičan, različita je samo bulova varijabla koja se dodeljuje (true/false). Dakle, kao prvi korak, izvlačimo zajednički deo koda van iz uslova:
Prvo refaktorisanje
if !checkAll
checkAll = true
else
checkAll = false
_.forEach clips, (item) - >
item.DownloadSelected = checkAll
Već nakon prvog refaktorisanja kod je znatno kraći i čitljiviji za nas i naše kolege, ali moguće ga je dodatno uprostiti. Sad jasno vidimo da u oba ishoda varijabla obrće samu sebe. U sledećem koraku ćemo to eksplicirati:
Drugo refaktorisanje
checkAll = !checkAll
_.forEach clips, (item) - >
item.DownloadSelected = checkAll
Kao što vidite, if/else uslov je potpuno nestao (magija)! Međutim, ostao je konfuzan naziv varijable checkAll, koja zbog imperativnog gramatičkog oblika zvuči kao funkcija. Potrebno je još i to promeniti kako ne bismo dovodili ljude u zabludu:
Konačna verzija
allChecked = !allChecked
_.forEach clips, (item) - >
item.DownloadSelected = allChecked
Eto, nakon pospremanja, naš kod je postao duplo kraći i čitljiviji! Zato, čistimo uvek svoj kod kao što čistimo kuhinjski sto.
Happy coding :)