Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 427

 
Artyom Trishkin:
Und lesen Sie, wie oft eine statische Variable initialisiert wird. Und die Frage selbst wird wegen ihrer Absurdität verschwinden ;)

Wie ist das zu verstehen: Lokale Variablen, die mit dem Schlüsselwort static deklariert werden, behalten ihre Werte für die gesamte Lebensdauer der Funktion. Jedes Mal, wenn die Funktion erneut aufgerufen wird, enthalten diese lokalen Variablen die Werte, die sie beim vorherigen Aufruf hatten. Ist eine Variable, die in einer benutzerdefinierten Funktion deklariert wird, nicht eine lokale Variable?

 
Alekseu Fedotov:

Zur zweiten Frage,

Wenn der erste Tick nicht verfängt, dann wird es der zweite tun.

Gibt die Öffnungszeit der Bar zurück. Das wird in der gesamten Bar der Fall sein.
 
novichok2018:

Wie ist das zu verstehen: Lokale Variablen, die mit dem Schlüsselwort static deklariert werden, behalten ihre Werte für die gesamte Lebensdauer der Funktion. Jedes Mal, wenn die Funktion erneut aufgerufen wird, enthalten diese lokalen Variablen die Werte, die sie beim vorherigen Aufruf hatten. Ist eine Variable, die in einer benutzerdefinierten Funktion deklariert wird, nicht eine lokale Variable?

Der Modifikator static macht sie statisch, und sie wird im Speicher für statische Variablen gespeichert, nicht lokal.
 
Artyom Trishkin:
Gibt die Öffnungszeit der Bar zurück. Das wird in der gesamten Bar der Fall sein.

Ich habe es hier. Ich danke Ihnen.

 
Artyom Trishkin:
Der Modifikator static macht sie statisch und sie ist bereits im Speicher für statische Variablen, nicht für lokale Variablen, gespeichert.

Das ist der Punkt, den ich nicht verstehe. Meiner Meinung nach spielt es keine Rolle, wo die Variable gespeichert ist, da der Code den Wert der Variable bei jedem Zugriff auf die Funktion auf Null zurücksetzt. Und wozu?

 
novichok2018:

Das ist der Punkt, den ich nicht verstehe. Meiner Meinung nach spielt es keine Rolle, wo die Variable gespeichert ist, da wir mit dem Code den Wert der Variablen bei jedem Zugriff auf die Funktion auf Null zurücksetzen. Und wozu?

Für den ersten Start - wenn Sie ihn anmelden. Danach liegt es an Ihnen, den Inhalt zu kontrollieren.
 
Artyom Trishkin:
Für den ersten Start - bei der Deklaration. Außerdem kontrollieren Sie den Inhalt selbst.

Meiner Meinung nach ist dies jedoch nicht der Fall: Der Code wird jedes Mal Zeile für Zeile gelesen, und jedes Mal, wenn er auf Null trifft, und beim ersten Durchlauf würde die Variable, auch wenn es keine Initialisierung gibt, den Wert Null annehmen. Die statische datetime-Zeichenkette New_Time=0; zwingt das Programm also zu unnötiger Arbeit.

 
novichok2018:

Meiner Meinung nach ist dies jedoch nicht der Fall: Der Code wird jedes Mal Zeile für Zeile gelesen, und jedes Mal, wenn er auf Null trifft, und beim ersten Durchlauf würde die Variable, auch wenn es keine Initialisierung gibt, einen Nullwert annehmen. Die statische datetime-Zeichenkette New_Time=0; zwingt das Programm also zu unnötiger Arbeit.

Man sagt Ihnen "nein", Sie sagen "ja"...
Drucken Sie einfach den Wert der Variablen in das Journal und beobachten Sie. Warum streiten Sie, wenn man Ihnen die einfachsten Dinge erklärt?
Sie können ohne mich weitermachen, bis Sie es selbst überprüfen.
 
Artyom Trishkin:
Du sagst nein, du sagst ja...
Drucken Sie einfach den Wert der Variablen in das Logbuch und sehen Sie nach. Warum sich die Mühe machen, wenn einem die einfachsten Dinge erklärt werden?
Weiter, ohne mich, bis Sie es selbst überprüfen.
Sie müssen nicht beleidigt sein. Aber offensichtlich lesen Programmierer Text anders. Ich habe immer geglaubt, dass, wenn es in einem Programm heißt "gleich Null", der Computer gleich Null sein muss, egal ob beim Start oder bei wiederholten Verweisen auf eine Codezeile. Und es ist nicht nötig, irgendein Journal zu besuchen, um zu beweisen, dass die Null-Initialisierung unnötig ist, man kann sie einfach entfernen: static datetime New_Time; erzeugt absolut die gleichen Ergebnisse wie static datetime New_Time=0; ich weiß nicht, wie viel schneller der Programmablauf ist, ich nehme an, es ist überhaupt nicht signifikant, aber es entfernt trotzdem "unnötige Gesten".
 
novichok2018:
Seien Sie nicht beleidigt. Aber Programmierer lesen Texte offensichtlich anders. Ich war immer der Meinung, dass, wenn es im Programm heißt "gleich Null", der Computer es gleich Null setzen muss, egal ob beim Start oder bei wiederholtem Verweis auf eine Codezeile. Und man braucht kein Journal zu besuchen, um zu beweisen, dass die Null-Initialisierung unnötig ist, man muss sie nur entfernen: static datetime New_Time; erzeugt absolut die gleichen Ergebnisse wie static datetime New_Time=0; ich weiß nicht, wie viel schneller das Programm arbeitet, ich gebe zu, dass es überhaupt nicht signifikant ist, aber es beseitigt trotzdem "unnötige Gesten".
Ich bin nicht beleidigt über Sturheit. Und warum?
Und Variablen müssen explizit initialisiert werden. Auf die Bedeutung der Initialisierung werden wir noch zu sprechen kommen. In der Zwischenzeit können Sie alles in geschweiften Klammern wegwerfen.