Daos schreef op vrijdag 02 augustus 2013 @ 20:43:
[...]
Vaak heb je een algoritme dat uit meerdere delen bestaat. Eerst initialiseren, dan een loopje waarin meerdere dingen gebeuren, etc. Neem bijvoorbeeld
Wikipedia: Dijkstra's algorithm.
Ik zou dit bij elkaar laten staan en niet opsplitsen in functies. In commentaar licht je dan toe wat het algoritme doet (zoals ook bij de pseudocode van Dijkstra is gedaan).
Past op zich netjes in een scherm. Gaat qua indentatie drie niveaus diep, dat is op het randje. Is voor mij al een waarschuwing. Zou er meer in de while en/of for each loops gebeuren dan zou ik aan refactoren gaan denken, zoals het er nu staat kan het.
De hoeveelheid commentaar is natuurlijk voor een groot deel te wijten aan het feit dat het voorbeeldcode is maar ook worden er op veel plekken niet-beschrijvende variabelenamen en functienamen gebruikt. Eigenlijk raar om dingen eerst heel bondig te schrijven en dan een hoop karakters aan commentaar er achter te zetten om te beschrijven wat het betekent. Ik denk ook dat sommige dingen in veel programmeertalen niet zo bondig geschreven zouden kunnen worden als deze pseudocode en je toch met een langere lap code te maken krijgt die je toch liever opdeelt.
Punten waar je het zou kunnen opsplitsen:
- De initialisatie in de eerste for loop zou voor deze functie kunnen gebeuren, source lijkt later niet meer gebruikt te worden, Graph ook niet
- De while loop zou dus ook een aparte functie kunnen zijn die dist retourneert
- De geneste for each loop zou ook apart kunnen gebeuren als die weer te lang wordt.
Je ziet dat er af en toe al pseudo-functies aangeroepen worden in de pseudo code.
Maar goed dit is Dijkstra pseudo-code, liever had ik een implementatie gezien in C# wat neem ik aan ook een beetje het uitgangspunt is van het boek.