Nõndapsi. Olen tagasi tööl päris ettevõttes, ning see kood mida ma
mind tervitavas koodibaasis näen, ei pane mind just rõõmust hüppama.
Täna sattusin sellise eluka otsa:
Esmapilgul ei paistnudki see kood nii halb. Mahub teine ju ilusasti
ühele leheküljele. Kuid lähemal uurimisel hakkasid silma mitmed
probleemid.
SQL
Ma isiklikult ei koostaks SQL-i sellise konkateneerimiste jadana, vaid
looksin lihtsalt mitmerealise stringi – aga see on rohkem stiili
küsimus. Kuid eriliselt kummaline näib see kuidas sisestatakse
sellesse SQL-i hetke kuupäev ja aeg:
Millegipärast näeb see kood hirmsasti vaeva, et tekitada DateTime
objekt, millelt omakorda pärida Unixi ajatempel, mis aga on ju
niikuinii date funktsiooni vaike-parameeter ning sama tulemuse annab
lihtsalt:
Lõppeks sisestatakse see kuupäev SQL-i, kuid sama tulemuse saaksime ju
ka SQL-i enda NOW() funktsiooniga…
Tingimus
Jättes kahe silma vahele pöördumise globaalse Yii instantsi poole,
leiame järgmisena koodist ühe huvitava tingimuslause:
Siin on midagi ülearu:
isset kontrollib, et muutuja poleks defineerimata või null.
empty kontrollib, et muutuja poleks tühi või null. Seega
kontroll $rows != null on üleliigne.
Eelnevast koodist näeme muutuja $rows defineerimist, seega on ka
isset üleliigne. Pole mõtet kontrollida funktsiooni kohalike
muutujate eksisteerimist.
Uurides Yii raamistiku dokumentatsiooni saame teada, et queryAll()
tagastab alati massiivi, seega pole empty vajalik null väärtuse
tuvastamiseks. Võibolla on siis tarvis meil vältida tühja massiivi?
Aga ei… ka mitte seda. Sellisel juhul jääb järgnev foreach
vahele kõige loomulikumal moel - üle tühja massiivi käiakse 0
korda.
Seega, kogu see if on täiesti ebavajalik.
Tsükkel
Aga asugem tsükli kallale. Ilma tolle if-ita näeb see välja säärane:
See on nüüd küll veits kummaline. Miks on meil vaja toda $i
muutujat? Me võiksime ju massiivi lihtsalt uusi elemente juurde
lükkida:
Oo.. see sai küll palju lihtsam… aga mida kogu see tsükkel üldse
saavutada püüab? Kas see mitte ei kirjuta täpselt sama nimega välju
ühest massiivist lihtsalt teise?
Oi jah… tuleb välja, et suurem osa sellest koodist on täiesti
üleliigne.