PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stilfrage


SgtTynis
2006-08-07, 17:03:20
Betrifft so gut wie alle gaengigen Programmiersprachen, ich mach es hier aber mal am Bsp. C#. Es geht um die Frage (die ich mir oft selber stelle), welcher Stil bei der Abfrage auf Objektexistenz der besser ist (und warum):


if (objectVariable == null) return;
// tue was

oder:

if (objectVariable != null)
{
// tue was
}

Gast
2006-08-07, 17:08:08
scheißegal

Monger
2006-08-07, 17:10:43
Üblicherweise das, was dir den Weg und den Code verkürzt.

Normalerweise erwartest du ja gar kein null Objekt, eigentlich gehst du davon aus, dass du ein gültiges Objekt bekommst, und das dann manipulieren und auswerten kannst.


Meiner Meinung nach sollten Ergebnisse grundsätzlich so früh wie möglich zurückgegeben werden. Wenn ich einen Fehler habe, rechne ich nicht erst stundenlang weiter um zum Schluss eine Fehlermeldung zu werfen, sondern ich melde das Problem so schnell es geht. (Ich glaube das läuft unter dem Stichwort "Fail-fast behaviour")

Senior Sanchez
2006-08-07, 17:28:53
Die erste Variante ist doch auch viel übersichtlicher.

Du checkst zuerst ab, ob sich das Objekt in einem gültigen Status befindest. Wenn nicht, wird die Methode verlassen.

Außerdem ersparste dir so unnötige Klammerung und Einrückung was den Code in die Breite ziehen würde und schlechter lesbar macht, imo.

del_4901
2006-08-07, 19:16:45
jo, ersteres ist ein sehr schoener Stil, insbesondere wenn man in verschachtelte If's gerät.

Trap
2006-08-07, 20:08:07
Die beste Variante ist meist:
Verbiete die Funktion ohne Objekt aufzurufen und lass den Test weg.

Wenn das nicht direkt geht, sollte man meist 2 Funktionen drauß machen, eine die nur die Tests auf null macht und eine die von bestehenden Objekten ausgehen kann.

HellHorse
2006-08-07, 21:44:08
Erstes wird als "guard(ing) clause" bezeichnet und gilt in machnen Kreisen (die üblichen Refactoring Verdächtigen) als besserer Stil (insbesondere ggü nested conditionals).

Abnaxos
2006-08-07, 22:05:47
Das ist Geschmackssache. Einige sind der Meinung, mehr als ein Return-Point in einer Methode sei pöse. Andere finden das wunderbar. Wieder andere finden mehrere Return-Points zwar pöse, machen aber bei Guarding-Conditions eine Ausnahme.

Meine Meinung: Es kommt auf den Kontext an (ja, ich weiss, ich mache es mir damit jetzt sehr einfach :biggrin:).

RMC
2006-08-08, 00:17:33
Ich bevorzuge einfach eine Mischung...und das nur der Übersichtlichkeit und Lesbarkeit halber

if(variable == null)
return;
else
{
...
}

oder auch umgekehrt

if(variable != null)
...
else
...

5tyle
2006-08-08, 10:49:49
Hängt stark von der benutzen Codevervollständigung ab.

Zuerst natürlich immer auf positiv prüfen. Am Anfang eines Blocks auf ungleich zu prüfen ist für längere Verschachtelungen nicht sinngemäß.

Senior Sanchez
2006-08-08, 16:37:28
Ich bevorzuge einfach eine Mischung...und das nur der Übersichtlichkeit und Lesbarkeit halber

if(variable == null)
return;
else
{
...
}


Wobei du dir hier das else mit Klammern sparen kannst ;) Es ist einfach nicht nötig.

RMC
2006-08-08, 16:42:28
Wobei du dir hier das else mit Klammern sparen kannst ;) Es ist einfach nicht nötig.

Is klar, weiß ich schon...mir ist es aber der Übersicht halber lieber ;)

muhkuh_rs
2006-08-10, 09:32:52
Ich bevorzuge meist den unerwarteten Fall abzufangen. Also:

if (null==object)
{
assert(false);
return;
}

...

Da der im Normalfall auszuführende Code meistens umfangreicher als der bei der Fehlerbehandlung ist, erhögt das IMHO die Lesbarkeit, da dieser dann nicht durch ein oder mehrere ifs eingerückt ist. Wenn ich recht darüber nachdenke, könnten bei umgekehrter Behandlung auch hässliche ineinandergeschachtelte ifs entstehen.