Hogyan írjunk könnyedén elmagyarázható kódot?

Amikor a kódot nem lehet szavakkal leírni, a legtöbb embernek kell egy kis mentális leképezés, hogy szavakba tudja önteni. Ez pedig más, fontosabb dolgoktól veszi el az energiát, és nagy a kockázata, hogy rosszul értelmezik a kódot. Különböző emberek különbözőképpen fogják értelmezni a szavakat, ami pedig zavarodottságot eredményez a kód megvitatása során.



Ez pedig gyakran termékeny szaporodási helye a kommunikációs félreértésekből született bugoknak, melyek kijavítása sokszor újabbakhoz vezet ugyanezen okokból. A végén pedig egy olyan kód kerekedik ki az egészből, melyet senki nem ért igazán, és senki nem akar hozzányúlni.



Egy példa az elmagyarázhatatlan kódra


Könnyű azt hinni, hogy a kód már önmagában egy leírt nyelv. Ha egyszerűnek néz ki, akkor egyszerűen lehet olvasni, beszélni róla és hallgatni. Azonban nem mindig ez a helyzet.


Alább látható egy gyakori megoldás a szökőévek ellenőrzésére.


(divisibleBy(4) and not divisibleBy(100)) or divisibleBy(400)


Ez nem egy túlbonyolított kód. Hív egy függvényt háromszor, melynek három operátora van (és, vagy, tagadás), és két szintű beágyazást alkalmaz.


Azonban ha megpróbálnád szavakkal leírni az algoritmust, szerintem igazán meggyűlne vele a problémád.



Talán „Egy év szökőév, ha osztható néggyel és nem osztható százzal, vagy osztható négyszázzal”?


Az a probléma vele, hogy a kódnak vannak zárójelei, de a szavaknak nincsenek. Így a szavak nem képesek megfelelően leírni a feltételt, és nem tudni, hogy a „vagy osztható négyszázzal” az a „néggyel osztható” vagy a „négyszázzal nem osztható” feltételre vonatkozik. Természetesen megpróbálhatsz nonverbális jeleket segítségül hívni; mutogathatsz vagy változtathatod a szünetet az állítások között, de remélhetőleg egyértelmű, hogy rengeteg potenciális hibát rejt magában.



Refaktorálás elmagyarázható kóddá


Ehelyett kezdhetjük azzal, hogy leírjuk a feltételeket szavakkal, majd ezután annyira tömörítjuk és egyértelműsítjük őket, amennyire csak lehet. Kezdhetjük például így:


„A 400 év egy különleges eset. Ha egy évszám osztható négyszázzal, akkor az adott év szökőév. A 100 év szintén egy különleges eset. Ha egy évszám osztható százzal, akkor nem szökőév, kivéve, ha osztható négyszázzal is, mert akkor szökőév. Ha pedig nem áll fenn különleges eset, akkor az év szökőév, ha osztható néggyel.”



Ez már egyértelmű, de egyáltalán nem tömör, így jó lenne egy kicsit rövidíteni:


„Ha egy évszám osztható négyszázzal, akkor szökőév. Egyébként, ha osztható százzal, akkor normális év. Ezen kívül pedig minden néggyel osztható évszám szökőév.”


Ha ezeket a szavakat alakítjuk kóddá, akkor valószínűsíthetően valami hasonlót fogunk kapni:


if divisbleBy(400):
return LeapYear
elif divisbleBy(100)
return NormalYear
elif divisbleBy(4):
return LeapYear
else:
return NormalYear


Konklúzió


A nehezen érthető kód egy mindennapos jelenség nagyjából minden programozó számára. Segíthetünk magunkon és a kollégáinkon, ha olyan kódot írunk, melyet könnyen le lehet írni szavakkal.



És a legjobb az egészben, hogy így kódolni igazából könnyebb, mint bármilyen más módon, mivel így nem kell semmilyen mentális leképzéshez nyúlnunk, nem vesztegetünk energiát vele. Az egyetlen „trükk” az algoritmus szavakba öntése, és utána az ennek megfelelő kód írása.


(Forrás)

***
Ha Te is kreatív, kihívásokkal teli mérnök állást keresel minoségi munkáltatónál, jó helyen jársz, mert a Schönherz Bázis épp azért jött létre, hogy Neked segítsen.
Gyere, nézz szét aktuális állásaink között!


2019.11. 20.