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

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Do Jan 23, 2020 1:31 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Do Jan 23, 2020 1:48 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

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

Beitrag von cloidnerux » Do Jan 23, 2020 7:14 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Do Jan 23, 2020 9:22 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Do Jan 30, 2020 12:55 pm

Ja, gut. Ich wollte eigentlich nur wissen, ob es ein Konvention gibt. Offenbar nicht. Danke.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Do Jan 30, 2020 6:55 pm

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten