[taal] engels: rechtstreeks
Ik heb in een class een getIterator method omdat die class de IteratorAggregate interface implementeert.
Nu wil ik in het commentaar van die method erbij schrijven dat ik die method niet "rechtstreeks" moet aanroepen. Wat is dan de juiste vertaling?
Ik dacht aan:
Do not call this method directly.
of
Do not call this method manually.
Is een van deze beide opties correct? Of weten jullie wellicht iets beters?
Maar naar mijn mening zijn ze beide goed, al zou ik de eerste doen.
Als iemand nog iets beters weet dan hoor ik het graag.
Waarom zou je getInterface() als programmeur niet aan mogen roepen? Kan erg handig zijn.
Dos Moonen op 11/03/2014 17:36:43:
Waarom zou je getInterface() als programmeur niet aan mogen roepen? Kan erg handig zijn.
Euh... getInterface? Het ging om een getIterator method :)
Het lijkt me niet nodig om die rechtstreeks aan te roepen, omdat die automatisch wordt aangeroepen zodra je het object in een loop gebruikt.
Best Current Practice uit RFC 2119. Daarin is de betekenis vastgelegd van "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" en "OPTIONAL".
Als je het helemaal duidelijk en netjes wilt doen, gebruik je de Gewijzigd op 11/03/2014 18:46:34 door Ger van Steenderen
Ger, in dit geval kan het niet anders. Mijn class implement een IteratorAggregate interface. Die dwingt een public method getIterator af. Valt weinig aan te doen lijkt me.
Ozzie, en waarom zou je in de method dan het aanroepen moeten verbieden? getIterator kan best nuttig zijn zonder loop.
Wanneer dan?
1. Je implementeert een interface die het gebruik van getIterator() voorschrijft.
2. Vervolgens schrijf je in documentatie een aanvullend voorschrift: getIterator() mag niet gebruikt worden.
Dan ga je toch niet dit doen:
Code (php)
Dan gaat toch het nut van die automatische iterator verloren?
Nee, want je kan hem alsnog als automatische iterator gebruiken. Het is niet dat doordat je hem direct aanroept, je meteen de hele automatische functionaliteit voor altijd kwijt bent.
Dat zeg ik ook niet... maar mijn vraag is, waarom zou je die iterator afzonderlijk aanroepen terwijl je gebwoon het object kunt loopen? Wat mis ik?
IteratorAggregate interface niet met de Iterator interface?
De IteratorAggregate interface dient namelijk duidelijk maar één doel: “Interface to create an external Iterator.” Dan is het dus logisch dat deze interface maar één methode heeft: abstract public Traversable getIterator ( void ) voor het retourneren van die gecreëerde externe iterator.
Verwar je de De IteratorAggregate interface dient namelijk duidelijk maar één doel: “Interface to create an external Iterator.” Dan is het dus logisch dat deze interface maar één methode heeft: abstract public Traversable getIterator ( void ) voor het retourneren van die gecreëerde externe iterator.
Nee, volgens mij niet. Ik heb dat ooit van Wouter geleerd volgens mij.
De getIterator method wordt aangeroepen zodra je het object in een loop zet. Op die manier kun je door de class properties heen loopen.
Ja, dat klopt, maar jij gebruikt daarvoor functioneel/procedureel PHP met een foreach. Dat ziet er toch wel een ietsiepietsie anders uit dan de Iterator interface:
Code (php)
Of laten we het anders omkeren: waar in die foreach gebruik je de functionaliteit van de Ieterator interface of de IteratorAggregate interface?
Ik wil door mijn class properties heen kunnen loopen.
Voor de IteratorAggregate heb je die methods die jij hierboven zet helemaal niet nodig. Alleen de getIterator method:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Snap je?
En waarom mag de enige methode getIterator() van de IteratorAggregate interface dan niet worden aangeroepen?
Ik zeg niet dat het niet mag, maar ik zeg dat het onzinnig is. Waarom zou ik eerst de iterator gaan aanroepen, terwijl ik ook direct door het object heen kan loopen zonder die method aan te roepen? Zeg jij het maar...
De interface IteratorAggregate kent maar één enkel voorschrift: implementeer de methode getIterator(). That's it. Niet meer, niet minder. Als je dan uitgerekend die ene methode nu juist niet ziet zitten, dan implementeer je toch gewoon de hele interface niet?
Het wordt zo haast een schizofreen vraagstuk: waarom wil je een interface implementeren die je niet wilt implementeren?