| 

.NET C# Java Javascript Exception

2
Moin Jungs,

mal so eine generelle Frage die mich gerade beschäftigt:
Ist es ratsam lange IF-Bedingungen auszulagern und innerhalb der if nur noch den boolischen Wert abzufragen?

Beispiel:
if (($var1 >= 4 || $var1 <= 10) && ($var5 != $1 && $var3 == 2) || $var8%2 == 2) ...

hierbei könnte man das ja noch weiterspinnen... klar - boolische Algebra und Zeilentrennung spielen hier auch eine Rolle.

Aber was wäre, wenn mann hingeht und folgendes macht:
// Kommentar zur Zeit ...
$condition['time'] = ($var1 >= 4 || $var1 <= 10);
// Kommentar zu Jahr ....
$condition['year'] = ($var5 != $1 && $var3 == 2);
// Kommentar zu Budget ....
$condition['budget'] = ($var8%2 == 2);

if (($condition['time'] && $condition['year']) || $condition['budget'])...


Es bedeutet zwar ein wenig mehr tiparbeit - aber ist es nicht besser lesbar? So könnte man zu den einzelnen Bedingungen noch einzelne Kommentare versehen - was wiederrum besser fürs Verständis und die Lesbarkeit wäre...

Was meint Ihr dazu?

VG Paul
17.07.2015
spiike 170 1 7
Dürfen Mädchen, Frauen nicht antworten?
BeachBlocker 30.07.2015
3 Antworten
0
Bei mir kommt das immer drauf an. Wenn der If-Ausdruck nicht zu lange ist, lagere ich ihn nicht aus. Nur wenn es unübersichtlich wird, berechne ich erst die Konditionen. Ich kann mir auch nicht vorstellen, dass es geschwindigkeitsmäßig einen großen Unterschied macht.
17.07.2015
muffi 1,4k 1 9
0
Dein Beispiel ist gut. Wenn ich komplexe Bedingungen auswerten muss, gehe ich auch meist diesen Weg.Ganz einfach deshalb, weil ich, wenn ich nach einem halben Jahr nochmal in den Code schaue, immer noch sofort sehe, was da ausgewertet wird.
18.07.2015
luedi 2,0k 1 9
0
Es ist wahrscheinlich (fast) immer übersichtlicher, die if Bedingung sprechend auszulagern

if( amTagAlsDeutschlandWeltmeisterWurde($dateTime) ) // Sportart nach eigener Vorliebe

Besonders bei objectoriertierten Programmiersprachen sollte die Bedingung in das entfernte Object ausgelagert werden:

statt
if( foo->bar != null && ((foo->bar & 7) == 4) && foo->baz < DateTime.now() )
besser
if( foo->isDraft )
30.07.2015
BeachBlocker 617 3

Stelle deine --Frage jetzt!