HowToCode: Null Problemo mit Null, Exceptions & andere Rückgabetypen
Die Null-Diskussion die Thomas Bandt begonnen hatte flaut langsam ab und ich möchte hier mal für mich die Hauptpunkte niederschrieben. Die Hauptfrage war: Ist es OK Null bei einer Methode zurückzugeben, wenn z.B. kein User mit der ID 5 existiert? Macht man es über Enums? Oder über Exceptions?
Beispiel: IUserRepository mit der Methode “GetUser(Guid id)”
Wir stellen uns vor, wir hätten ein eines UserRepository was eine Get Methode besitzt, welche eine Guid als Parameter erwartet.
Was passiert wenn kein Ergebnis gefunden wird?
Thomas sein ursprünglicher Gedanke: Null.
Das Problem dabei: Man muss es prüfen und es wird nicht wirklich erwartet (einfach die vielen Kommentare lesen).
Jürgen Gutsch hat die vielen verstreuten Posts in einem Blogpost mal zusammengefasst.
Das was ich aus der Diskussion mitgenommen habe:
- Im Normalfall niemals NULL zurückgegeben
- Man erwartet es nicht und es gibt bessere Varianten
- Wenn ein Objekt erwartet wird:
- bei einer “Get” Methode eine Exception werfen wenn das gewünschte nicht gefunden wurde
- evtl. eine “Find” mit speziellen Rückgabetypen (ReturnCodes/bool/IResultWrapper) oder “TryXXX” Methode mit einem out Parameter anbieten.
- Um die Lesbarkeit zu erhöhen hat sich Ralf ein paar Gedanken gemacht
- Wenn eine Collection erwartet wird:
- Eine leere Collection zurückgeben
Wichtig ist, dass die API intuitiv zu benutzen ist. NULL ist IMHO nicht wirklich intuitiv. Ich seh die ganze Sache auch aus Webentwicklersicht – ein Geräteprogrammierer mag das völlig anders sehen.
My 2 cents







Ilker Cetinkaya
4. May 2010
Robert,
super Zusammenfassung der Dinge. Ich finde es auch gut, dass Du den Kontext am Ende noch erwähnst, deine “Webentwicklersicht”, das trägt zum weiteren Verständnis bei.
Ich habe die Kontextabhängigkeit und das damit irgendwie verbundene “It Depends” ja in dem Yin Yang-Post – http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/ – auch hervorgehoben, weil es nun mal so ist, dass wir alle mit verschiedenen Problemen, Plattformen und Frameworks zu tun haben.
Ebenso My 2 Cents
Jürgen Gutsch
5. May 2010
Hi Robert,
eine schöne Zusammenfassung
Danke für deinen Link