Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Oder Abfrage eleganter lösen (http://www.expert-advisor.com/forum/showthread.php?t=6325)

Max2018 31.01.19 16:06

Oder Abfrage eleganter lösen
 
Hallo,

mal was fürs Auge und einen schlankeren und übersichtlicheren Code...

Kann man eine lange Kette an "oder" Abfragen "||" wie diese übersichtlicher und in mehreren Zeilen schreiben?

Code:

if (Hour()==8&&Minute()>58&&OpenAbstandAN==false||Open[0]>Open[OpenAbstand]&&OpenAbstandAN==true||Bid>iMA(NULL,0,MAPeriode,0,MODE_SMA,PRICE_CLOSE,1)&&MovingAvarageControl==true||HandelszeitAN==true&&Hour()<StartStunde||HandelszeitAN==true&&Hour()>EndStunde)

MA-EA 31.01.19 16:16

Ja, in dem man für jede Bedingung nen bool in einer Zeile schreibt.

traderdoc 31.01.19 18:06

Code:

if (Hour()==8&&Minute()>58&&OpenAbstandAN==false||Open[0]>Open[OpenAbstand]) {
  if (OpenAbstandAN==true||Bid>iMA(NULL,0,MAPeriode,0,MODE_SMA,PRICE_CLOSE,1)) {
      if (MovingAvarageControl==true||HandelszeitAN==true) {
        if (Hour()<StartStunde||HandelszeitAN==true) {
            if (Hour()>EndStunde) {
              //...
            }
        }
      }
  }
}

traderdoc

Adlerauge 31.01.19 19:05

...wenn man jetzt noch die jeweils zusammengehörenden auf- und zugehenden Schweifklammern bündig untereinander schreibt, wird es noch übersichtlicher...

traderdoc 31.01.19 20:21

Zitat:

Zitat von Adlerauge (Beitrag 42112)
...wenn man jetzt noch die jeweils zusammengehörenden auf- und zugehenden Schweifklammern bündig untereinander schreibt, wird es noch übersichtlicher...

Warum?
Das ist platzsparender und bleibt zusätzlich übersichtlich.
Die Bündigkeit ist mit der zugehenden Schweifklammer gegeben.

Das Einzige, was ich sonst noch bzgl. der Übersichtlichkeit mache, ist die Operationszeichen mit einer Freistelle versehen, also so:

Code:

if (Hour() == 8 && Minute() > 58 && OpenAbstandAN == false || Open[0] > Open[OpenAbstand]) {
  if (OpenAbstandAN == true || Bid > iMA(NULL, 0, MAPeriode, 0, MODE_SMA, PRICE_CLOSE, 1)) {
      if (MovingAvarageControl == true || HandelszeitAN == true) {
        if (Hour() < StartStunde || HandelszeitAN == true) {
            if (Hour() > EndStunde) {
              //...
            }
        }
      }
  }
}

So, jetzt könnte man noch die überflüssigen true und false weglassen:

Code:

if (Hour() == 8 && Minute() > 58 && !OpenAbstandAN || Open[0] > Open[OpenAbstand]) {
  if (OpenAbstandAN || Bid > iMA(NULL, 0, MAPeriode, 0, MODE_SMA, PRICE_CLOSE, 1)) {
      if (MovingAvarageControl || HandelszeitAN) {
        if (Hour() < StartStunde || HandelszeitAN) {
            if (Hour() > EndStunde) {
              //...
            }
        }
      }
  }
}

So, nun sieht der Code so übersichtlich und schön aus, dass ihn MicroSoft auch nicht besser hätte schreiben können.

traderdoc

Adlerauge 01.02.19 11:08

Ich habe vor längerem an einem Programmier-Kurs teilgenommen. Der Kursleiter benutzte auch die Schreibweise der aufgehenden Schweifklammern am Ende der Zeilen. Das hatte zur Folge, dass ständig diverse Kursteilnehmer damit beschäftigt waren, Schweifklammern zu suchen und zu zählen. Das Problem hatten alle. Ca. 10% der gesamten Zeit ging dafür verloren. Letztendlich ist es natürlich Geschmackssache, aber für die Mehrheit ist diese Schreibweise keine gute Idee.
Ich würde den Code so schreiben:
PHP-Code:

if (Hour() == && Minute() > 58 && !OpenAbstandAN || Open[0] > Open[OpenAbstand])
 { if (
OpenAbstandAN || Bid iMA(NULL0MAPeriode0MODE_SMAPRICE_CLOSE1))
    { if (
MovingAvarageControl || HandelszeitAN)
       { if (
Hour() < StartStunde || HandelszeitAN)
          { if (
Hour() > EndStunde)
             {   
//...
 
}  }  }  }  } 

Das ist am Übersichtlichsten und auch am Platzsparensten...

traderdoc 01.02.19 11:43

Dann mögen die geschweiften Klammern mit Dir sein.
Warum wohl der Kursleiter die aufgehende Klammer an das Ende der Zeile geschrieben hat...?
Und wenn man sich angewöhnt sofort ein Klammerpaar zu setzen, dann braucht man auch nix zählen.

traderdoc

Adlerauge 01.02.19 11:59

Zitat:

Zitat von traderdoc (Beitrag 42116)
Und wenn man sich angewöhnt sofort ein Klammerpaar zu setzen, dann braucht man auch nix zählen.

Ja, das stimmt, aber dann könntest Du ja die zugehenden Schweifklammern auch alle hintereinander ans Zeilenende schreiben, um Platz zu sparen. Mit Deinem Argument könntest Du auch den gesamten Code in einem hintereinander wegschreiben, ohne jeglichen Zeilenumbruch...

Aber wer was als Übersichtlich empfindet ist subjektiv verschieden...

traderdoc 01.02.19 14:24

Ne, lass mal jetzt, das geht alles in die falsche Richtung. Keiner hat was von 'alles in eine Zeile schreiben' geschrieben. Ich denke, dass mein Codebeispiel auch nicht im Geringsten danach aussieht. Lesbarkeit hat auch was mit Symmetrie und Optik zu tun.
Und ich denke, dass @Max2018 jetzt genug Code gesehen hat.

traderdoc

Indexreiter 02.02.19 01:10

Programmierer haben eben auch ihre Weltanschauung. Für mich ist Übersichtlichkeit immer wichtiger als Zeilenersparnis. Deshalb setze ich auch immer die öffnende Klammer genau unter das i vom if.
Solche und/oder-Monster vermeide ich wenn es geht. Geht es aber nicht, so würde ich dieses Beispiel der Übersicht halber so codieren:

PHP-Code:

   
   
if (Hour() == 8  &&  Minute() >58  &&  !OpenAbstandAN
      
|| Open[0] > Open[OpenAbstand]  &&  OpenAbstandAN
      
|| Bid iMA(NULL0MAPeriode0MODE_SMAPRICE_CLOSE1)  &&  MovingAvarageControl
      
|| HandelszeitAN  &&  Hour() < StartStunde
      
|| HandelszeitAN  &&  Hour() > EndStunde)
   {
      
//...
   


Mir erscheint das übersichtlicher und pflegeleichter, da Zufügen oder Herausnehmen einer Bedingung nur immer eine Code-Zeile betreffen.

@Adlerauge - Auf die Idee, alle schließenden Klammern in eine Zeile zu setzen, bin ich auch noch nicht gekommen. Aber ich meide auch 5-stöckige if-Abfragen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:17 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum