Erzwungenes Array-Clearing in MT5? - Seite 3

 
Vladimir Karputov:

Wenn das Array nicht initialisiert wird, ist das alleinige Verschulden des kodopistael. Suchen Sie nach Fehlern in Ihrer eigenen Umgebung. Bauen Sie Ihren Algorithmus neu auf.

Es liegt kein Fehler vor.

Die automatische Array-Initialisierung mit Nullen bei der Deklaration wird einfach deaktiviert. Und warum? - unbekannt. Aus diesem Grund müssen Sie das Array manuell löschen, bevor Sie es verwenden. Das ist nicht immer bequem.

 
Реter Konow:

Es liegt kein Fehler vor.

Die automatische Initialisierung von Arrays mit Nullen bei der Deklaration wurde entfernt. Und warum? - unbekannt. Aus diesem Grund müssen Sie das Array manuell löschen, bevor Sie es verwenden. Das ist nicht immer bequem.

Was wollen Sie? Nachlässiges Schreiben im Stil von "4"? Rücksichtslos nicht existierende Indizes abfragen? Hoffen Sie auf einen "Mann", der Ihre Arrays für Sie initialisiert?

MQL5 wird solche Amateure scharf zurechtweisen, damit sie keinen Spielraum haben. Lernen Sie, von Anfang an richtig zu schreiben: Wenn Sie ein Array erstellt haben, müssen Sie alle Indizes umgehen und sie füllen. Wenn Sie sie nicht alle auf einmal füllen wollen, füllen Sie sie schrittweise, indem Sie die Größe des Arrays vorläufig erhöhen.

Im Allgemeinen sollten Sie einen normalen Algorithmus anwenden und Ihre Probleme nicht auf andere abwälzen.

 
Vladimir Karputov:

Was wollten Sie tun? Nachlässiges Schreiben im Stil von "4"? Rücksichtslos nicht existierende Indizes abfragen? Verlassen Sie sich auf den "Onkel", der Ihre Arrays für Sie initialisiert?

MQL5 wird solche Amateure scharf zurechtweisen, damit sie keinen Spielraum haben. Lernen Sie, von Anfang an richtig zu schreiben: Wenn Sie ein Array erstellt haben, müssen Sie alle Indizes umgehen und sie füllen. Wenn Sie sie nicht alle auf einmal füllen wollen, füllen Sie sie schrittweise, indem Sie die Größe des Arrays vorläufig erhöhen.

Im Allgemeinen sollten Sie einen normalen Algorithmus anwenden und Ihre Probleme nicht auf andere abwälzen.

Das Vorfüllen eines Arrays ist kaum fehleranfällig. Es ist praktisch.

In MT5 deklarieren Sie ein Array, bereinigen den Papierkorb und verwenden es dann.

In MT4 deklarieren Sie ein Array und verwenden es.

Das ist der Unterschied.

Warum sollten wir die Aufgabe, die Arrays zu löschen, auf einen Benutzer übertragen?

Wird dadurch ihre Professionalität gesteigert? Vielleicht. Aber es wird sicherlich keine positiven Emotionen hervorrufen)). Entschuldigen Sie also meine negative Einstellung. Ich verbrachte mehrere Tage damit, herauszufinden, was los war. Das geht mir auf die Nerven.)

 
Die automatische Reinigung wurde aufgrund der Geschwindigkeit entfernt.
 
Реter Konow:

Es liegt kein Fehler vor.

Die automatische Initialisierung von Arrays mit Nullen bei der Deklaration wurde entfernt. Und warum? - unbekannt. Aus diesem Grund müssen Sie das Array manuell löschen, bevor Sie es verwenden. Das ist nicht immer bequem.

Peter, die Initialisierung wird entfernt, weil diese Prozedur Zeit kostet und es in C++ und MQL5 nicht üblich ist, für etwas zu bezahlen, das man nicht benutzt. Die Initialisierung eines Arrays ist nicht immer erforderlich, z. B. wenn Sie das Array sofort mit den gewünschten Werten füllen, ist sie nicht notwendig.

Jedenfalls verstehe ich bei Ihrer Frage nicht, worin die Schwierigkeit besteht. Sie kennen immer die Größe Ihres Arrays. Wenn Sie ein Array neu unterteilen, wissen Sie immer, wie viele Elemente Sie hinzufügen. Es ist also einfach, die Funktion ArrayInitialize direkt nach ArrayResize aufzurufen.

Sie fragen sich vielleicht, wie die Menschen MQL5 nutzen, wenn sie zusätzlich so viele Dinge berücksichtigen müssen? Die Antwort ist: Diejenigen, die MQL5 auf einem guten Niveau verwenden, benutzen die Standardbibliothek, also denken sie nicht einmal über all dieses Zeug nach, sie initialisieren kein Array oder benennen es neu, sie fügen einfach neue Werte hinzu. Aber da Sie ein Dartan sind und nichts von alledem erkennen, haben Sie nur eine Möglichkeit: die mühsame Verwaltung Ihrer Arrays auf niedriger Ebene, indem Sie ArrayInitialize verwenden.

 
Vasiliy Sokolov:

1. Peter, die Initialisierung wurde entfernt, weil diese Prozedur Zeit kostet und es in C++ und MQL5 nicht üblich ist, für etwas zu bezahlen, das man nicht benutzt. Eine Array-Initialisierung ist nicht immer erforderlich, z. B. wenn Sie das Array sofort mit den gewünschten Werten füllen, ist sie nicht notwendig.

2. und ich verstehe immer noch nicht, worin die Schwierigkeit besteht, wenn ich Ihre Frage lese. Sie wissen immer, wie groß Ihr Feld ist. Wenn Sie ein Array neu aufteilen, wissen Sie immer, wie viele zusätzliche Elemente Sie dem Array hinzufügen. Es ist also einfach, die Funktion ArrayInitialize nach ArrayResize aufzurufen.

Sie fragen sich vielleicht, wie man MQL5 verwenden kann, wenn es so viele zusätzliche Dinge zu beachten gibt? Die Antwort ist: Diejenigen, die MQL5 auf einem guten Niveau verwenden, benutzen die Standardbibliothek, so dass sie nicht einmal über diese Dinge nachdenken, sie initialisieren ein Array oder seine Neuaufteilung nicht, sie fügen einfach neue Werte hinzu. Aber da Sie ein Dartan sind und nichts dergleichen zugeben wollen, haben Sie nur eine Möglichkeit: die mühsame Verwaltung Ihrer Arrays auf niedriger Ebene mit ArrayInitialize.

Vasily, Punkt für Punkt:

1) Die Logik sagt uns, dass der Compiler die Array-Cleanup-Prozedur nur einmal während der Kompilierung ausführt. Wenn sie entfernt wurde, bedeutet das, dass wir die Leistung des Compilers auf Kosten der Bequemlichkeit des Programmierers erhöhen wollten, aber vielleicht auch, um sein Niveau zu steigern.

2. Die Größe des Kernels hängt vom Cybercode ab. Je mehr Elemente, desto größer das Kernel-Array. Der Kernel ist also dynamisch. Sie wird stufenweise aufgebaut. Wenn sich in den Zellen Müll befindet, führen die Verweise von einer Zelle zur anderen in Funktionen in verschiedenen Stadien der Erstellung zu einem Programmabsturz.

In MT4 gab es dieses Problem nicht, da nicht initialisierte Zellen Nullen und keine Zufallswerte waren. Kurz gesagt, meine Technologie sollte zunächst mit einem sauberen Array funktionieren.

3. ich bin nicht gegen erzwungenes benutzerdefiniertes Array-Clearing, nur, wie ich schon sagte, ein bisschen nervig. Ein paar Tage lang konnte ich nicht verstehen, warum alles zusammenbricht. Ich dachte, es sei meine Schuld, aber es stellte sich heraus, dass sie mir eine meiner Annehmlichkeiten genommen haben)).


Macht nichts, wir werden uns daran gewöhnen.)


ZS: Übrigens sollte ich sagen, dass mein Code absolut plattformübergreifend ist. Ich brauche nichts zu ändern, außer dieser Aufräumaktion!

 
Реter Konow:

Es liegt kein Fehler vor.

Die automatische Initialisierung von Arrays mit Nullen bei der Deklaration wurde entfernt. Und warum? - unbekannt. ...

Damit wir schnelle Programme schreiben können. Eine Initialisierung ist bei weitem nicht immer erforderlich, vielmehr wird das Array sofort mit seinen eigenen Daten gefüllt.

 
Dmitry Fedoseev:

Um schnelle Programme schreiben zu können. Eine Initialisierung ist nicht immer erforderlich, oft wird das Array sofort mit seinen eigenen Daten gefüllt.

GUT. Ich verstehe.

 
Реter Konow:

... Wenn sich in den Zellen Müll befindet, führen Verweise von einer Zelle auf eine andere in Funktionen, die sich in verschiedenen Stadien der Konstruktion befinden, zum Absturz des Programms.

Piotr, wenn du Müll in deinem Kern hast, bist du allein dafür verantwortlich. MQL5 versucht im Gegensatz zu MQL4 nicht zu verstehen, was der Benutzer will, und das ist auch richtig so.

 
P.S. Ich glaube, du hättest mehr Glück gehabt, Peter, wenn du in einem JavaScript-Forum gelandet wärst. Dort gibt es viele dieser Köstlichkeiten. Du hättest große Höhen erreicht!