Seite 1 von 1

Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 23, 2020 1:31 pm
von Orioner
Ich habe mal gelesen (oder gehört), dass man die Hauptlogik im if-Zweig abarbeiten sollte, nie im else-Zweig und im else-Zweig dann das, was programmtechnisch weniger relevant ist. Nun könnte man natürlich fragen, wie wird festgelegt, was wichtiger und was unwichtiger ist, aber darum soll es hier jetzt nicht gehen. Ich möchte wissen, was haltet ihr - prinzipiell - von der Behauptung?

Re: Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 23, 2020 1:48 pm
von Xin
Es gibt in allen Fächern Regeln, die keinen Sinn ergeben. Das halte ich von der Behauptung.
Für die CPU spielt es keine Rolle wierum die Bedingung geschrieben ist. Das macht nur an einer Stelle Sinn: Beim Lesen. Und hier stimme ich erstmal zu: Der gewünschte Regelfall sollte sich im then-Bereich abspielen.

Code: Alles auswählen

if( precondition_1 )
{
  if( precondition_2 )
  {
    disired_behaviour();
  }
  else
    return failcode_2;
}
else
  return failcode_1;
Hier geht es nur um Lesbarkeit.

Die kann man aber auch steigern, wenn man das ganze umgekehrt aufbaut:

Code: Alles auswählen

if( !precondition_1 )
  return failcode_1;

if( !precondition_2 )
  return failcode_2;

desired_behaviour();
Der zweite Code ist kürzer, meiner Meinung nach lesbarer und das gewünschte Verhalten befindet sich quasi im else-Bereich.

Die Regel für guten Code ist eigentlich sehr einfach: Wähle die für den Algorithmus optimale Schreibweise. Statische Regeln sind da kontraproduktiv.

Re: Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 23, 2020 7:14 pm
von cloidnerux
Ich Stimme Xin ganz zu, bis auf zwei "Details": Der Compiler und die CPU, besser Hardware Branch Predictors.

Durch diverse Optimierung/Prozessoptimierung wird dein Code in Assembler umgewandelt. Dabei werden bestimmte Konstrukte/Pattern besser oder schlechter umgesetzt. Dabei kann es schon sein, dass der Compiler annimmt, dass der Code im if-teil wichtiger ist, als der im else teil. Moderne Compiler werden hier aber wrsl auch mit etwas Intelligenz heran gehen.

Die Hardware Branch Predictoren versuchen schon vorher abzuschätzen, welchen Zweig dein Programm nimmt, und versuchen diesen vorzeitig auszuführen, um dann mit der Auswertung der Bedingung bereits den Code ausgeführt zu haben. Auch hier kann es Vorteilhaft sein, bestimmte Reinfolgen einzuhalten.

Aber insgesamt kann ich keine genaue Aussage dazu treffen.

Re: Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 23, 2020 9:22 pm
von Xin
An der Stelle muss ich sagen, dass ich heute niemandem anraten möchte, für oder gegen die Intelligenz des Compilers zu programmieren.
Branch-Prediction ist gut uns schön, aber meiner Meinung sollte es kein Thema in einer höheren Programmiersprache, sofern diese nicht erlaubt einen Branch als den Wahrscheinlicheren zu markieren.

Re: Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 30, 2020 12:55 pm
von Orioner
Ja, gut. Ich wollte eigentlich nur wissen, ob es ein Konvention gibt. Offenbar nicht. Danke.

Re: Hauptlogik im if- oder im else-Zweig, oder egal?

Verfasst: Do Jan 30, 2020 6:55 pm
von Xin
Orioner hat geschrieben:
Do Jan 30, 2020 12:55 pm
Ja, gut. Ich wollte eigentlich nur wissen, ob es ein Konvention gibt. Offenbar nicht. Danke.
Konventionen gibt es viele. Es gibt nur keine, an die sich alle halten. :-D