Het is inderdaad de bedoeling dat je duidelijke functienamen moet hebben. Functienamen die duidelijk omschrijven wat er gebeurt. Wanneer je aangeeft dat je in de knel komt met naamgeving dan komt dat dus waarschijnlijk omdat je veel stukjes code hebt die bijna hetzelfde doen. Dat zou een indicator kunnen zijn van dat het ook iets beter zou kunnen.
Verder over commentaar. In principe zou je zo min mogelijk commentaar moeten gebruiken*. Het grote probleem met commentaar is dat het niet door de compiler wordt gecompileerd, niet door de unittests wordt getest en niet door automatische refactoring meegenomen wordt. Het is een handmatige actie om het commentaar in lijn met de code te houden en niks is schadelijker voor de onderhoudbaarheid wanneer het commentaar niet overeenkomt met de uiteindelijke werking.
Verder is 1 functie van 50 regels die in 5 groepjes van 10 regels met in die 10 regels 5 regels code en 5 regels commentaar veel beter de volgorde te zien.
Als je evenveel commentaar als code nodig hebt om je code leesbaar te houden is er IMHO toch echt iets mis aan code. Daarnaast zul je eerst de afzonderlijke blokjes van 10 regels moeten bekijken wat er precies in dat blok gebeurt voordat je een uitspraak kunt doen over wat de hele methode doet.
* let op, ik zeg zo min mogelijk.Een beetje zoals Einstein ooit zei: "Make things as simple as possible, but not simpler"
MBV schreef op maandag 17 januari 2011 @ 15:18:
Vergeet ook niet dat een functie weer 4 regels ruimte kost: 1 witregel, 1 regel met functiedeclaratie, 2 regels met accolades. Daarnaast nog wat commentaar natuurlijk. Er past dus minder effectieve code op je scherm, waardoor je het overzicht eerder kwijt raakt.
Het doel is niet om je class/module zo kort mogelijk te houden. Het doel is om een enkele functie zo klein mogelijk te houden. Zolang je naamgeving duidelijk is is vervolgens elke functie goed leesbaar zonder dat je de functies zelf weer erbij hoeft te pakken. Maar mocht je ze nodig hebben, met een beetje fatsoenlijke IDE spring je met CTRL-click er heen en met back weer terug naar je originele functie.
Vaak maak ik ergens pas een functie van op het moment dat het een herbruikbare unit is, dus als ik hem op een 2e plek nodig heb of dat de control flow anders te complex wordt. 85 regels zonder control flow kan veel overzichtelijker zijn dan diezelfde code over 10 functies verspreid.
Ik niet. Een verzameling statements die eigenlijk 1 actie uitvoert refactor ik vaak al naar een losse methode met als naam die actie. (Maar eigenlijk ontwikkel ik vaak wat meer topdown waarbij ik mijn hoofd algoritme uittik met nog niet bestaande methoden die ik later implementeer)
Ik ben erg benieuwd naar je lap code van 85 regels die niet overzichtelijker zou kunnen.
[
Voor 46% gewijzigd door
Janoz op 17-01-2011 15:29
]