Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

Katastrophenfall ‘NULL’?

Mit seinem Beitrag Kleiner Helper für Linq to Sql: ToListOrDefault() hat Thomas Bandt am Wochenende eine Diskussion zum Thema “Null als Rückgabewert” angestoßen (man beachte die Kommentare). Wie nicht anders zu erwarten (:-P), wurde die Diskussion natürlich auch von Ralf Westphal aufgenommen: Null oder nicht Null, das ist hier die Frage (auch hier die Kommentare beachten).

Weiter ging es wieder Bei Thomas Bandt mit dem Beitrag Null Verständnis der es tatsächlich auf 40 Kommentare gebracht hat. Auch Ilker Cetinkaya konnte es sich diesmal nicht verkneifen ebenfalls etwas zu dem Thema zu schreiben: Null Toleranz, vorauf hin Ralf schlagfertig reagierte: Es hilft nichts, dass es darauf ankommt – nicht nur beim Null-Problemo [OOP 2010] und Ilkers Haltung kritisierte. [Update] Ilkers Antwort folgte gestern relativ schnell: Kein Yin ohne Yang, kein Null ohne Pointer (Auch hier bitte unbedingt die Kommentare lesen)

Ein scheinbar vorläufiges Fazit zur Diskussion schreibt Thomas in seinem letzten Beitrag zum Thema Null: Null Erkenntnis? Ganz im Gegenteil. 

[UPDATE]
Eben hat sich auch der Karsten zum Thema geäußert: #Handwerk: Clean vs. pragmatisch?

Was hier fast wie ein Sportbericht aussieht, ist ein Diskussion über ‘Null’ als Rückgabewert und über eine fehlende Regel zu dem Thema ob und wann ‘Null’ als Rückgabe erlaubt ist, oder nicht.

Verschiedenste Lösungen kommen in allen Beiträgen und deren Kommentaren vor. So unter anderem:

  1. Exception statt ‘Null’
  2. Leere Objekte statt ‘Null’
  3. ‘Null’ nur passend zur Kategorie
  4. ‘Null’ nur mit Vorsicht
  5. it depends
  6. ‘Null’ im Katastrophenfall

Katastrophenfall ‘NULL’

Und dieser letzte Punkt ist eigentlich der einzige, an dem ich mich wirklich anstoße:

Ilker Cetinkaya [http://www.gmbsg.com/null-toleranz/]
Ich gebe in einigen Methoden NULL zurück. Meistens genau dann, wenn ich wirklich damit ausdrücken möchte, dass etwas katastrophales passiert ist.

Wenn etwas eine Katastrophe ist, sollte diese Katastrophe nur in wirklich unvermeidbaren Ausnahmen auftreten. In diesem Fall kann auch eine Ausnahme erzeugt werden. Ich bin in so einem Fall tatsächlich für eine Exception, statt einer ‘Null’ (Punkt 1).

Als Webentwickler dagegen bin ich der Ansicht das man die Erzeugung von Exceptions unbedingt mit Vorsicht genießen sollte und nur dann einsetzen sollte, wenn es wirklich unvermeidbar ist. Den Exception Handling kostet Performance. Exceptions sollten also auch Exceptions bleiben und “exceptionally used” werden. Im Web ist es IMHO wichtiger Fehler zu vermeiden, als für jeden möglichen Fall eine neue Exception zu erzeugen. Zum Thema “Fehler vermeiden” gehört IMHO auch, das Auslösen von Exceptions vermeiden, wenn es sich irgendwie vermeiden lässt. Aus diesem Grund sollte der erste Punkt “Exceptions statt ‘Null’” ebenfalls mit Vorsicht genossen werden.

Und was ‘Null’ als Rückgabewert angeht, enthalte ich mich fürs erste (was spezielle Regeln angeht) und bleibe Beobachter dieser Grundlagendiskussion. Ich bin mir einfach selber noch nicht schlüssig, was hier richtig und was falsch ist. Die Rückgabe von ’Null’ ist bequem, harmlos und tastbar, kann also nicht grundlegend falsch sein.

Im Moment tendiere ich noch zu dem Punkt “it depends” ;-)

DotNetKicks-DE Image
Posted: Montag, 3. Mai 2010 13:29 von Jürgen Gutsch

Kommentare

ilker.cetinkaya@gmbsg.com sagte:

Hallo Jürgen,

zu der Null-Katastrophe habe ich gestern auch gebloggt: http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/

Die Diskussion schreitet schnell voran :-) Im Endeffekt ist dieses "Katastrophen-Szenario" ein ziemlich seltenes gewesesn und auch schon eine Weile her. Heute würde ich es wohl eher mit Exceptions lösen, wie im Post erwähnt.

Zu dem "It depends" kann ich Dir meine Zustimmung geben. Da ich auch einiges an Weberfahrung mitnehmen durfte, verstehe ich die "Fehlervermeidungs"-Strategie voll und ganz.

Bestens,

Ilker

# Mai 3, 2010 14:07

Jürgen Gutsch sagte:

Hallo Ilker,

vielen Dank, für deinen Kommentar :-)

Ich hatte deinen Beitrag von gestern bereits gelesen, aber beim schreiben wohl vergessen. :-(

# Mai 3, 2010 15:22

Peter Bucher sagte:

Hoi Jürgen

Ein Vorteil von einer Nullrückgabe ist - Speedfreak - Speed :-).

Exceptions an sich sind ja kein Problem. Exceptions benutzen, um sie anschliessend selber gezielt abzufangen und die Anwendung weiterlaufen lassen, können zu einem Problem werden.

Klar, liest sich doof. Ich meine damit, das zur Laufzeit einer Webanwendung bei einem Request bspw. 20 Exceptions geworfen und gefangen werden. Wenn es dann tausende Requests werden - oder sogar schon vorher - fangen die Probleme dann an.

Es heisst ja: Benutze keine Exceptions (Ausnahmen), um den Programverlauf zu steuern. Oder: Eine Ausnahme soll eine Ausnahme bleiben.

Aber da kann man auch Ausnahmen manchen (Keine Regel ohne Ausnahme), wird jedoch eher seltener der Fall sein.

# Mai 9, 2010 12:46
Anonyme Kommentare sind nicht zugelassen