Soms blijf ik wel eens hangen op de simpelste dingen. Een dilemma wat ik vaak tegenkom en ik elk project weer mijn hoofd over breek over wat nou het 'mooist' is, het meest performant, en/of future-proof met betrekking tot het returnen van data uit een klasse.
Stel een class met private data collectie:
Hoe zouden jullie getItem(..) definieren als de gegeven index ook out of range kan zijn. Nu return ik vaak het gevraagde object als pointer, maar NULL als niet gevonden. Echter gaat dit een beetje tegen de regels van encapsulatie in: ik geef een pointer naar interne data aan de buitenwereld.
Return by value kan ook. Maar dan moet Bar weer een property als .valid() of .isNull() oid bevatten. Idem voor const ref (welke ik dan prefereer). Een alternatief is om een pointer naar een dest Bar object mee te geven welke false returned als niet gevonden:
Met het risico een ongeldige dest ptr aangereikt te kregen.
Mijn hele simpele vraag is dus: wat heeft jullie voorkeur en waarom (Exceptions geen optie)?
Stel een class met private data collectie:
C++:
1
2
3
4
5
6
7
8
| class Bar; class Foo { public: Bar* getItem(int id ); //returns NULL if id out of range private: List<Bar> m_barItems; } |
Hoe zouden jullie getItem(..) definieren als de gegeven index ook out of range kan zijn. Nu return ik vaak het gevraagde object als pointer, maar NULL als niet gevonden. Echter gaat dit een beetje tegen de regels van encapsulatie in: ik geef een pointer naar interne data aan de buitenwereld.
Return by value kan ook. Maar dan moet Bar weer een property als .valid() of .isNull() oid bevatten. Idem voor const ref (welke ik dan prefereer). Een alternatief is om een pointer naar een dest Bar object mee te geven welke false returned als niet gevonden:
C++:
1
| bool getItem(int id, Bar * dest); |
Met het risico een ongeldige dest ptr aangereikt te kregen.
Mijn hele simpele vraag is dus: wat heeft jullie voorkeur en waarom (Exceptions geen optie)?