Nuttig commentaar
Door Koen Vlaswinkel, 1 jaar geleden, 22.378x bekeken
Om je code leesbaar te maken, ook na een paar jaar, moet je je code goed documenteren. Hiervoor zijn allemaal stijlen en ik zal er een paar toelichten:
- De 4 algemene stijlen van PHP, zoals //, # en /*.
- Hoe je gegevens mooi kan laten zien in een tabel
- De algemene stijl van documenteren voor phpDocumenter
- Een paar nuttige tags van phpDocumenter
Bron: PHP Kookboek, Ward van der Put
Gesponsorde koppelingen
Inhoudsopgave
21 reacties op 'Nuttig commentaar'
Gesponsorde koppelingen
Jammer dat het letterlijk is overgenomen...
Maar toch wat puntjes:
Er bestaat totaal geen verschil tussen /* of /**. Alleen hebben de *Documenters bedacht dat het handig is om onderscheid te maken tussen document comments en gewone multi line comments en toen hebben ze de /** bedacht.
Tevens mis ik dat je in dit hoofdstuk het echte verschil tussen // (en #) en /* */ noemt: single line vs multi line
Hoofdstuk 4
Ik vind het altijd makkelijk om verschillende tags met een spatie van elkaar te scheiden, dat is altijd wel makkelijk. Ook vertel je nergens hoe een PHPdoc comment is opgebouwd:
Ook een return tag kan een description bevatten (al is dat vaak overbodig).
Bij meerdere authors ga je die niet met een komma scheiden, maar gebruik je gewoon meerdere author tags (zoals je ook met param doet)
Merk op dat er veel andere PHP documenters zijn dan PHPdoc, bijv. Sami
[sidenote]
Voor JavaScript kun je YUIdoc gebruiken
[/sidenote]
Maar toch wat puntjes:
Hoofdstuk 2:
Er bestaat een verschil tussen /* en /** met een extra sterretje. Als je het commentaar opent met /**, dan wordt het overgenomen door phpDocumenter, waarover later meer.
Er bestaat totaal geen verschil tussen /* of /**. Alleen hebben de *Documenters bedacht dat het handig is om onderscheid te maken tussen document comments en gewone multi line comments en toen hebben ze de /** bedacht.
Tevens mis ik dat je in dit hoofdstuk het echte verschil tussen // (en #) en /* */ noemt: single line vs multi line
Hoofdstuk 4
Ik vind het altijd makkelijk om verschillende tags met een spatie van elkaar te scheiden, dat is altijd wel makkelijk. Ook vertel je nergens hoe een PHPdoc comment is opgebouwd:
Ook een return tag kan een description bevatten (al is dat vaak overbodig).
Bij meerdere authors ga je die niet met een komma scheiden, maar gebruik je gewoon meerdere author tags (zoals je ook met param doet)
Merk op dat er veel andere PHP documenters zijn dan PHPdoc, bijv. Sami
[sidenote]
Voor JavaScript kun je YUIdoc gebruiken
[/sidenote]
Hoi Koen,
Allereerst een leuke toevoeging.
Even een paar opmerkingen:
Style van schrijven:
Ik vind de intro tekst van je tutorial iets te summier. Kan je deze wat uitbreiden? Bijvoorbeeld gesommeerd weergeven wat je gaat behandelen.
Op dit moment is het vlak gesponsorde koppelingen (wat overigens niet aan jouw ligt) groter dan de intro tekst. Dat is een beetje storend :-)
Algemeen:
- Probeer iets meer te werken met paragrafen. (Zie inleiding. Is één grote lap tekst)
- Wanneer je zegt: Ik ga een paar dingen bespreken, zet dat dan in een opsomming.
- Nawoord vind ik ook te kort. Wanneer dat zo kort is kan je hem beter weglaten denk ik.
Inhoudelijk:
Tot slot, ben ik het niet geheel met je tutorial eens. Huh? Hoezo niet dan? Waarom zeg je hier dan dat je PHPDoc / Documentatie wel altijd moet toevoegen?
Pas geleden las ik dit artikel.
Eerst was ik het hier totaal mee eens. Nu heb ik mijn mening iets aangepast.
Ik ben het dus niet helemaal eens met de stelling:
"So stop making excuses, write the damm comment".
Jason geeft het volgende voorbeeld:
Volgens Jason is het niet direct duidelijk wat deze twee regels doen. (Ben ik het mee eens) Wat doet Jason nu? Het plaatst er het volgende commentaar boven:
Wat is daar verkeerd aan dan? Waarom ben jij het daar niet eens dan? Hoe kan je anders zien wat deze code doet?
Ansich, niets mis mee, maar ik heb naar mijn mening een betere manier gevonden. Stel, we zetten dit stukje code om naar een functie.
Is deze code niet veel beter leesbaar? En naast dat, de code is ook nog eens beter in gebruik.
Wanneer dan wel? Gebruik jij dan nooit commentaar?
Ja natuurlijk wel. Stel je hebt een functie die een bepaalde controle uitvoert. Wanneer je die code leest weet je niet precies waarom die controle uitgevoerd wordt. In dit geval is een stukje commentaar wel handig. Dan wordt het namelijk duidelijk waarom die controle wordt uitgevoerd.
De stelregel voor commentaar schrijven is dus niet: beschrijven wat de code doet, maar waarom de code datgene doet.
Niels
Allereerst een leuke toevoeging.
Even een paar opmerkingen:
Style van schrijven:
Ik vind de intro tekst van je tutorial iets te summier. Kan je deze wat uitbreiden? Bijvoorbeeld gesommeerd weergeven wat je gaat behandelen.
Op dit moment is het vlak gesponsorde koppelingen (wat overigens niet aan jouw ligt) groter dan de intro tekst. Dat is een beetje storend :-)
Algemeen:
- Probeer iets meer te werken met paragrafen. (Zie inleiding. Is één grote lap tekst)
- Wanneer je zegt: Ik ga een paar dingen bespreken, zet dat dan in een opsomming.
- Nawoord vind ik ook te kort. Wanneer dat zo kort is kan je hem beter weglaten denk ik.
Inhoudelijk:
Tot slot, ben ik het niet geheel met je tutorial eens. Huh? Hoezo niet dan? Waarom zeg je hier dan dat je PHPDoc / Documentatie wel altijd moet toevoegen?
Pas geleden las ik dit artikel.
Eerst was ik het hier totaal mee eens. Nu heb ik mijn mening iets aangepast.
Ik ben het dus niet helemaal eens met de stelling:
"So stop making excuses, write the damm comment".
Jason geeft het volgende voorbeeld:
Volgens Jason is het niet direct duidelijk wat deze twee regels doen. (Ben ik het mee eens) Wat doet Jason nu? Het plaatst er het volgende commentaar boven:
Code (php)
Wat is daar verkeerd aan dan? Waarom ben jij het daar niet eens dan? Hoe kan je anders zien wat deze code doet?
Ansich, niets mis mee, maar ik heb naar mijn mening een betere manier gevonden. Stel, we zetten dit stukje code om naar een functie.
Code (php)
Is deze code niet veel beter leesbaar? En naast dat, de code is ook nog eens beter in gebruik.
Wanneer dan wel? Gebruik jij dan nooit commentaar?
Ja natuurlijk wel. Stel je hebt een functie die een bepaalde controle uitvoert. Wanneer je die code leest weet je niet precies waarom die controle uitgevoerd wordt. In dit geval is een stukje commentaar wel handig. Dan wordt het namelijk duidelijk waarom die controle wordt uitgevoerd.
De stelregel voor commentaar schrijven is dus niet: beschrijven wat de code doet, maar waarom de code datgene doet.
Niels
@Jeroen, sinds wanneer heet jij Niels? ;-)
De vraag is dus of dat Niels z'n eigen stelregel is. Ik schrijf altijd op WAT een functie doet. Stel je hebt een functie die iets controleert, dan zou ik in het commentaar bijv. zeggen "Controleer of de gebruiker de juiste bevoegdheden heeft.". Echter, als ik de interpretatie van Niels volg, dan zou hij dus het WAAROM beschrijven. Ik vraag me dan af waar ik aan moet denken, zoiets als "Voer deze functie uit om te controleren of de gebruiker de juiste bevoegdheden heeft". Zoiets? Zo ja... wat is dan het daadwerkelijke verschil tussen beide varianten?
De vraag is dus of dat Niels z'n eigen stelregel is. Ik schrijf altijd op WAT een functie doet. Stel je hebt een functie die iets controleert, dan zou ik in het commentaar bijv. zeggen "Controleer of de gebruiker de juiste bevoegdheden heeft.". Echter, als ik de interpretatie van Niels volg, dan zou hij dus het WAAROM beschrijven. Ik vraag me dan af waar ik aan moet denken, zoiets als "Voer deze functie uit om te controleren of de gebruiker de juiste bevoegdheden heeft". Zoiets? Zo ja... wat is dan het daadwerkelijke verschil tussen beide varianten?
niet. ik kan me alleen goed vinden in niels zn gedachtegang.
als jij een functie schrijft met naam validateString(). zou jij daar nog commentaar bijschrijven? ik niet. hoogstens zoiets als "zorgt ervoor dat je zeker weet dat je met een string te maken het." zoiets. wat de functie doet staat in de naam, het 'waarom' in het commentaar. het is een beetje moeilijk hier een naam aan te geven, maar 'waarom' komt denk ik het beste in de buurt.
als jij een functie schrijft met naam validateString(). zou jij daar nog commentaar bijschrijven? ik niet. hoogstens zoiets als "zorgt ervoor dat je zeker weet dat je met een string te maken het." zoiets. wat de functie doet staat in de naam, het 'waarom' in het commentaar. het is een beetje moeilijk hier een naam aan te geven, maar 'waarom' komt denk ik het beste in de buurt.
Ik ben het half eens met Niels.
Functies als getters en setters enzo hebben geen commentaar nodig en ook veel functienamen beschrijven goed wat het is. Vaak is het schrijven voor commentaar niet echt nodig.
In elk geval, de regel met de short description. Tags als @return of @param zijn erg handig om erbij te hebben om snel wat info te krijgen over een method.
Tevens gebruik ik bij alles PHPdoc en volledig (bij alle classes/interfaces en methods, niet bij properties). Dit doe ik omdat ik altijd API Documentatie genereer. Dan is het handig om alles gedocumenteerd te hebben.
Functies als getters en setters enzo hebben geen commentaar nodig en ook veel functienamen beschrijven goed wat het is. Vaak is het schrijven voor commentaar niet echt nodig.
In elk geval, de regel met de short description. Tags als @return of @param zijn erg handig om erbij te hebben om snel wat info te krijgen over een method.
Tevens gebruik ik bij alles PHPdoc en volledig (bij alle classes/interfaces en methods, niet bij properties). Dit doe ik omdat ik altijd API Documentatie genereer. Dan is het handig om alles gedocumenteerd te hebben.
Quote:
als jij een functie schrijft met naam validateString(). zou jij daar nog commentaar bijschrijven? ik niet.
Het kan aan mij liggen maar mij zegt 'validateString' mij helemaal niks hoor? Wat valideert het dan? Ik denk eerder aan isStringLowercase() die test of alle karakters lowercase zijn. In zo'n geval ben ik het grotendeels met Niels eens en hoef je alleen de parameters / return waarde te commenten.
@Ozzie,
Het is een persoonlijk voorkeur, maar ik ben van mening dat commentaar in het meeste gevallen overbodig is. (Lees niet PHPDoc)
Dus ik zet bijvoorbeeld geen commentaar bij de volgende methode:
Maar stel ik zet in de methode een paar rare controles waar je niet direct van af kunt lezen WAAROM die controles uitgevoerd worden is het tijd voor een stukje commentaar ;-)
Snap je mijn punt?
@WouterJ
Ik bedoel niet de PHPDoc tags, maar echte documentatie ;-) PHPDoc gebruik ik natuurlijk altijd ;-)
Het is een persoonlijk voorkeur, maar ik ben van mening dat commentaar in het meeste gevallen overbodig is. (Lees niet PHPDoc)
Dus ik zet bijvoorbeeld geen commentaar bij de volgende methode:
Maar stel ik zet in de methode een paar rare controles waar je niet direct van af kunt lezen WAAROM die controles uitgevoerd worden is het tijd voor een stukje commentaar ;-)
Snap je mijn punt?
@WouterJ
Ik bedoel niet de PHPDoc tags, maar echte documentatie ;-) PHPDoc gebruik ik natuurlijk altijd ;-)
Hoi Wouter,
Wat ik bedoel is dit:
Ik schrijf dus niet:
Ik plaats een stukje commentaar boven code in de methode die niet in één oog opslag leesbaar zijn. (Lees: Waarvan niet af te lezen valt waarom die controle gedaan wordt)
Snap je?
Wat ik bedoel is dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
/**
* @param Int $id
* @access Public
* @return User
*/
public function getById($id) {}
?>
/**
* @param Int $id
* @access Public
* @return User
*/
public function getById($id) {}
?>
Ik schrijf dus niet:
Ik plaats een stukje commentaar boven code in de methode die niet in één oog opslag leesbaar zijn. (Lees: Waarvan niet af te lezen valt waarom die controle gedaan wordt)
Snap je?
Hoi Johan,
Het is al 4 maanden geleden dat je het bericht geplaatst hebt, maar ik wil toch nog even op je bericht reageren.
In mijn ogen wel. Je moet alleen commentaar plaatsen wanneer het nodig is. Altijd commentaar heeft totaal geen zin, en kost ook nog eens veel tijd.
Daarbij bedoel ik niet het gebruik van PHPDoc. Ik zet boven een methode altijd PHPDoc. Allereerst voor het genereren van een API en ten tweede voor het gebruik van autocompletion in mijn editor.
Mijn punt is dat je bewust commentaar moet plaatsen en niet boven elke functie commentaar moet plaatsen omdat het kan, leuk is, mooi staat, of omdat je het zo gewend bent ;-)
Niels
Het is al 4 maanden geleden dat je het bericht geplaatst hebt, maar ik wil toch nog even op je bericht reageren.
Quote:
Hoe meer commentaar hoe liever. Of zie ik dat verkeerd.
In mijn ogen wel. Je moet alleen commentaar plaatsen wanneer het nodig is. Altijd commentaar heeft totaal geen zin, en kost ook nog eens veel tijd.
Daarbij bedoel ik niet het gebruik van PHPDoc. Ik zet boven een methode altijd PHPDoc. Allereerst voor het genereren van een API en ten tweede voor het gebruik van autocompletion in mijn editor.
Mijn punt is dat je bewust commentaar moet plaatsen en niet boven elke functie commentaar moet plaatsen omdat het kan, leuk is, mooi staat, of omdat je het zo gewend bent ;-)
Niels
@Johan,
Het lijkt vaak dat, vooral PHP programmeurs vinden dat commentaar het doel moet zijn. Ze gebruiken heel onduidelijke functie/methode namen en met commentaar proberen ze dan duidelijk te maken wat een functie/methode doet.
Zelf gebruik ik het Clean code principe van Michael Feathers en Robert Martin. Volgens dat principe kun je beter langere maar goed leesbare en duidelijke functie en methode namen gebruiken dan korte en nietszeggende namen.
Als ik een functie schrijf dan houd ik mij aan een aantal punten waardoor commentaar bijna altijd overbodig is:
1. Beschrijvende functienamen. Daardoor zegt de functienaam net zo veel over de code als dat het commentaar doet.
2. Commentaar enkel als het echt echt echt echt nodig is. En dan niet meer dan 1 regel commentaar. Is er meer nodig? Dan is de functienaam niet duidelijk genoeg (uitzonderingen nagelaten uiteraard).
3. Gebruik het 1 taak principe. Een functie moet maar 1 taak hebben, en zo kort mogelijk zijn. Een functie met honderden regels (zoals in de inleiding staat) kan nagenoeg altijd worden refactored. Hoe meer regels hoe onduidelijker de functie is en hoe moeilijker het, zelfs met commentaar, word om over een jaar nog te zien wat de functie doet.
Sinds ik dit principe gebruik heb ik geen commentaar meer gebruikt. Daarnaast laat ik regelmatig mensen mijn classes lezen. Zij kunnen bijna altijd direct zien wat de code doet, zonder echt naar de code te kijken. Als zij het niet uit kunnen vinden wat de code doet dan is er iets mis met mijn functies of functienamen. Niet met het commentaar.
bernhard
Het lijkt vaak dat, vooral PHP programmeurs vinden dat commentaar het doel moet zijn. Ze gebruiken heel onduidelijke functie/methode namen en met commentaar proberen ze dan duidelijk te maken wat een functie/methode doet.
Zelf gebruik ik het Clean code principe van Michael Feathers en Robert Martin. Volgens dat principe kun je beter langere maar goed leesbare en duidelijke functie en methode namen gebruiken dan korte en nietszeggende namen.
Als ik een functie schrijf dan houd ik mij aan een aantal punten waardoor commentaar bijna altijd overbodig is:
1. Beschrijvende functienamen. Daardoor zegt de functienaam net zo veel over de code als dat het commentaar doet.
2. Commentaar enkel als het echt echt echt echt nodig is. En dan niet meer dan 1 regel commentaar. Is er meer nodig? Dan is de functienaam niet duidelijk genoeg (uitzonderingen nagelaten uiteraard).
3. Gebruik het 1 taak principe. Een functie moet maar 1 taak hebben, en zo kort mogelijk zijn. Een functie met honderden regels (zoals in de inleiding staat) kan nagenoeg altijd worden refactored. Hoe meer regels hoe onduidelijker de functie is en hoe moeilijker het, zelfs met commentaar, word om over een jaar nog te zien wat de functie doet.
Sinds ik dit principe gebruik heb ik geen commentaar meer gebruikt. Daarnaast laat ik regelmatig mensen mijn classes lezen. Zij kunnen bijna altijd direct zien wat de code doet, zonder echt naar de code te kijken. Als zij het niet uit kunnen vinden wat de code doet dan is er iets mis met mijn functies of functienamen. Niet met het commentaar.
bernhard
Hoi Niels,
Om te beginnen schrijf ik de code zo leesbaar mogelijk. Alles waar ik een klasse van kan maken maak ik ook een klasse van.
Maar bij bijvoorbeeld een import script ontkom je er soms niet aan om commentaar te plaatsen. En dan plaats ook ik commentaar. Maar zoals ik al zei in mijn vorige bericht, zelden meer dan een regel commentaar. Alleen commentaar die strikt noodzakelijk is.
Groeten,
Bernhard
Om te beginnen schrijf ik de code zo leesbaar mogelijk. Alles waar ik een klasse van kan maken maak ik ook een klasse van.
Maar bij bijvoorbeeld een import script ontkom je er soms niet aan om commentaar te plaatsen. En dan plaats ook ik commentaar. Maar zoals ik al zei in mijn vorige bericht, zelden meer dan een regel commentaar. Alleen commentaar die strikt noodzakelijk is.
Groeten,
Bernhard
Om te reageren heb je een account nodig en je moet ingelogd zijn.


PHP hulp
0 seconden vanaf nu