03 May 2010 Robert Muehsig

imageDie 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.
  • 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 ;)


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de