Merkmale der Sprache mql4, Feinheiten und Techniken - Seite 12

 
Ihor Herasko:

In vielen Softwareunternehmen würde man sich für einen solchen Code die Finger abhacken. Das erste, was immer und überall erforderlich ist, ist die Vermeidung von "unnötigem Lesen". Zum Beispiel, wenn Sie bei der Eingabe einer Funktion eine Bedingung verwenden:

dann ist es empfehlenswert, zu schreiben:

Dieser Ansatz ist eine große Hilfe, um die Bindung von Bedingungen zu vermeiden.

Das ist wieder einmal eine Plage. Weil niemand überprüft hat, was die Funktion OrderType() zurückgibt. Oder wurde vielleicht -1 oder 6 zurückgegeben? Dies ist ein Beispiel dafür, dass man sich auf die Eigenschaften des Compilers stützt, was man auf jeden Fall vermeiden sollte. Sie selbst führen viele Beispiele für plattformübergreifenden Code an. Warum weichen Sie also in diesem Fall davon ab? Wenn ein neuer MQ-Compiler herauskommt, wird dieser Code nicht mehr korrekt funktionieren.

Mit weiterhin die gleiche Situation. Code wie:

ist schwieriger zu lesen als:

Und doch ist die Effizienz der Ausführung in beiden Fällen die gleiche.

Das ist wirklich schade:

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
 
Vitaly Muzichenko:

Das ist doch totaler Quatsch, oder?

Was ist blechern? Bei einer Zeile einer Superexpression wird es schwierig. Der Mensch ist kein Computer, und er muss den Rest der Bedingung nicht verarbeiten. Ein Mensch muss, anders als ein Computer, den gesamten Ausdruck bis zum Ende durchrechnen und versteht dann erst, dass dessen erste Komponente zu einem falschen Ergebnis führt.

Bei einem Eintrag, bei dem alles durch einfache Bedingungen zerlegt wird, ist diese Berechnung unnötig: Die erste Bedingung ist nicht erfüllt - weg.

Sie müssen Zeit sparen, nicht Fäden. Aber sie kämpfen nur um die Kürze, die in Wirklichkeit ein Ineinandergreifen von Vorgängen und Bedingungen ist. Wenn diese Verpackung Ihnen nur einen erheblichen Produktivitätsgewinn bringen würde, könnte ich das verstehen. Aber das ist nicht der Fall. Das maximale Wachstum liegt innerhalb des Messfehlers. Die Leute sind darauf bedacht, Zeichenketten zu sparen, aber sie denken überhaupt nicht daran, Zeit für das Verständnis und die Fehlersuche im Code zu sparen.

 
Ihor Herasko:

Was ist die Dose? Eine Zeile mit einem Superausdruck - da wird es schwierig. Ein Mensch ist kein Computer und kann daher sofort verstehen, dass der Rest der Bedingung nicht bearbeitet werden muss. Ein Mensch muss, anders als ein Computer, den gesamten Ausdruck bis zum Ende durchrechnen und versteht dann erst, dass dessen erste Komponente zu einem falschen Ergebnis führt.

In der Akte, in der alles durch einfache Bedingungen zerlegt wird, ist eine solche Berechnung unnötig: Die erste Bedingung ist nicht erfüllt - weg.

Sie müssen Zeit sparen, nicht Fäden. Aber sie kämpfen nur um die Kürze, die in Wirklichkeit ein Ineinandergreifen von Vorgängen und Bedingungen ist. Wenn diese Verpackung Ihnen nur einen erheblichen Produktivitätsgewinn bringen würde, könnte ich das verstehen. Aber das ist nicht der Fall. Das maximale Wachstum liegt innerhalb des Messfehlers. Die Leute sind darauf bedacht, Zeichenketten zu sparen, aber sie denken überhaupt nicht daran, Zeit für das Verständnis und die Fehlersuche im Code zu sparen.

Ich würde es nicht als schwer lesbaren Super-Ausdruck bezeichnen.

if(!OrderSelect(i, SELECT_BY_POS) || OrderSymbol() != Symbol() || OrderMagicNumber() != m_nMagicNumber)
   continue;

Ach ja, und der "kurze Berechnungszyklus" ist eine grundlegende Sache, die beim Lesen einer Bedingung "automatisch" berücksichtigt wird, ohne dass dafür eine geistige Anstrengung erforderlich ist.

Auch dies ist eine rein subjektive Meinung.

 
Vladislav Boyko:

Sie haben selbst zugegeben, dass es eine Frage der Gewohnheit ist.

Und ich sage es noch einmal. Ich möchte niemanden ermutigen, seine Gewohnheiten zu ändern und nach einem Unterschied im Geschmack von Filzstiften zu suchen.

Igor Makanu:

Wie Sie schon sagten - es ist eine Frage des Geschmacks, aber wie Sie wissen: alle Filzstifte sind unterschiedlich ))))

Filzstifte unterscheiden sich nur in der Farbe, ihr Geschmack ist der gleiche.
 
Vladislav Boyko:

Ich würde es nicht als schwer zu lesenden Superlativ bezeichnen.

Und es ist nicht nötig, hier irgendetwas anzurufen. Bis jetzt haben meine Gegner (Sie eingeschlossen) kein einziges Argument vorgebracht, dass dieser Ausdruck leichter zu lesen ist als die Zeilenaufteilung.

Von mir wurden jedoch gleich drei Argumente vorgebracht:

  1. Eine lange Linie passt nicht in das Sichtfeld. Erfordert zumindest eine minimale Kopfdrehung (erhöht die Bearbeitungszeit). Eine kurze Zeile und die darauf folgende erfordern nicht so viel Aufwand.
  2. In einer langen Schlange ist es leichter, einen Fehler zu machen und ihn nicht zu bemerken. Durch die Aufteilung in Zeilen wird die Wahrscheinlichkeit eines solchen Fehlers verringert.
  3. Eine lange Zeile ist unmöglich zu debuggen. Die Aufteilung in Strings ist in Ordnung.
Keine subjektiven Präferenzen. Alles wird durch den praktischen Sinn bestätigt, mehr nicht. Ja, manche Menschen finden es vielleicht bequemer, ihr linkes Ohr mit der rechten Ferse zu kratzen, aber das bedeutet nicht, dass dieser Ansatz praktisch ist. In der Natur ist alles der Praktikabilität unterworfen, und es überleben diejenigen, die praktischer sind.
 
Ihor Herasko:

Und es ist nicht nötig, hier etwas zu nennen. Bis jetzt haben meine Gegner (Sie eingeschlossen) kein einziges Argument vorgebracht, dass dieser Ausdruck leichter zu lesen ist als die Zeilenaufteilung.

Von mir wurden jedoch gleich drei Argumente vorgebracht:

  1. Eine lange Linie passt nicht in das Sichtfeld. Erfordert zumindest eine minimale Kopfdrehung (erhöht die Bearbeitungszeit). Eine kurze Zeile und die darauf folgende erfordern nicht so viel Aufwand.
  2. In einer langen Schlange ist es leichter, einen Fehler zu machen und ihn nicht zu bemerken. Durch die Aufteilung in Zeilen wird die Wahrscheinlichkeit eines solchen Fehlers verringert.
  3. Eine lange Zeile ist unmöglich zu debuggen. Die Aufteilung in Strings ist in Ordnung.
Keine subjektiven Präferenzen. Alles ist durch den praktischen Sinn gerechtfertigt und durch nichts anderes. Ja, manche Menschen finden es vielleicht bequemer, ihr linkes Ohr mit der rechten Ferse zu kratzen, aber das bedeutet nicht, dass dieser Ansatz praktisch ist. Und in der Natur ist alles der Praktikabilität unterworfen, und es überleben diejenigen, die praktischer sind.

Igor, wenn sich die Augen nicht in den Augenhöhlen bewegen und man den Kopf drehen muss, kann man so schreiben:

if(OrderSelect(i, SELECT_BY_POS)
&& OrderSymbol() == _Symbol
&& OrderMagicNumber() == m_nMagicNumber)
 {
  // Делаем что надо...
 }

Und wie viele kurze Zeilen mit Irrtümern habe ich gefunden........... Die Anzahl und die Wahrscheinlichkeit von Fehlern hängt offensichtlich nicht von der Länge der Linie ab.

Mit der Fehlersuche kann man nur einverstanden sein. Aber die Gewohnheit wurde entwickelt, bevor der Debugger in mql4 auftauchte und nicht jeder ist in der Lage, die Gewohnheiten zu ändern.

 
Alexey Viktorov:

Igor, wenn sich die Augen nicht in den Augenhöhlen bewegen und man den Kopf drehen muss, kann man es so schreiben:

Und wie viele kurze Zeilen mit Irrtümern habe ich gefunden........... Offenbar hängen die Anzahl und die Wahrscheinlichkeit von Fehlern nicht von der Länge der Linie ab.

Man kann der Fehlersuche nur zustimmen. Aber die Gewohnheit hat sich vor dem Debugger in mql4 entwickelt und nicht jeder ist in der Lage, Gewohnheiten zu ändern.

Sie können es so machen, aber mit diesem Stil, um einen Programmblock zu sehen, müssen Sie den Bildschirm 2 mal scrollen und das ist schlimmer als den ganzen Code in einem Bildschirm zu sehen. (Das betrifft nicht Sie, es ist nur ein Beispiel).

 
fxsaber:

Leider lässt sich dieser Mythos in der Geschichte des Forums nicht belegen. Darüber hinaus haben die Entwickler immer wieder deutlich gemacht, dass solche Änderungen grundsätzlich nicht vorgenommen werden können.

So etwas gab es. Die Sortierung hat sich ausgewirkt.

Die Diskussion wurde wahrscheinlich im alten metatrader4.com-Forum geführt (das vor kurzem noch offen war, jetzt aber auf mql5.com umgeleitet wurde).

 
Andrey Khatimlianskii:

Es war folgendermaßen. Die Sortierung war betroffen.

Die Diskussion muss im alten metatrader4.com-Forum stattgefunden haben (das vor kurzem noch geöffnet war und jetzt auf mql5.com umgeleitet wird).

Es war, es war. Genau wie jetzt bei der Anzahl der historischen Aufträge, wenn Sie "Heute" einstellen, dann wird OrdersHistoryTotal() die Anzahl der geschlossenen Aufträge zurückgeben, die heute geschlossen wurden. Wenn auf der Registerkarte "Historie" keine alte Bestellung angezeigt wird, ist sie auch per Ticket nicht verfügbar.

 
Alexey Viktorov:

Es war, es war. Genau wie bei der Anzahl der historischen Aufträge wird OrdersHistoryTotal() die Anzahl der heute geschlossenen Aufträge zurückgeben, wenn Sie "Today" einstellen. Wenn auf der Registerkarte "Historie" keine alte Bestellung angezeigt wird, ist sie nicht verfügbar, auch nicht per Ticket.

Es geht ums Sortieren. Wenn sie damals nicht nach Zeit sortiert waren, konnte man den letzten Eintrag nicht über den Index finden - er war der letzte der sortierten Einträge.

Und jetzt hängt die Tiefe der Geschichte nicht mehr von der gewählten Registerkarte ab? Meiner Meinung nach ist das immer noch der Fall.