Fehler, Irrtümer, Fragen - Seite 1332

 
Alexey Navoykov:
Ihr Rat ist in der Praxis bedeutungslos. Niemand vergibt absichtlich identische Namen. Der Code lokaler Funktionen führt ein Eigenleben, während das externe Programm ein Eigenleben führt. Und die Namen externer Variablen können sich mit der Zeit ändern und neue externe Variablen können hinzugefügt werden.Und wenn dann plötzlich eine von Hunderten von Funktioneneine lokale Variable mit demselben Namen hat, was meinen Sie, sollten wir die globale Variable umbenennen? Sie sollten nicht nach Ausreden für die Fehler der Entwickler suchen.

Ich habe nicht nach einer Ausrede für Entwicklerfehler gesucht, aber dieser Fehler lässt sich leicht umgehen, indem man bei der Arbeit in einem Projekt nicht dieselben Variablennamen verwendet, die für die Eingabeparameter zuständig sind. Ändern Sie einfach den Namen in den Eingabeparametern, ich bezweifle, dass Sie Hunderte von Variablen in Ihren Eingabeparametern haben und den gesamten Code bearbeiten müssen :) der Hauptteil des Codes wird normalerweise am Einstiegspunkt der Software geschrieben und ist nicht so groß, alles wird durch Funktions(methoden) aufrufe erledigt. Und bei Funktionen (Methoden) ist es egal, welcher Name einer Variablen in den Eingabeparametern der Funktion übergeben wird.

Wenn Sie Code schreiben, in dem Funktionen globale Variablen verwenden, müssen Sie natürlich eine Menge Dinge ändern, aber dieser Code ist mit absolut keiner Vision geschrieben, er ist wirklich schwer zu modernisieren.

Obwohl, wenn man den Entwickler (MetaQuotes) aus der Sicht des Verbrauchers betrachtet, will man natürlich viel von allem auf einmal :) Ich würde gerne in einem Terminal arbeiten, das plattformübergreifend ist, aber die Antwort auf diese Anfrage wird eine sein - entweder man benutzt das, was man hat, oder man verzichtet darauf :)

 
Konstantin Karpov:

Ändern Sie einfach den Namen in den Eingabeparametern...

Sie haben eine etwas leichtfertige Sichtweise. Ändern Sie ihn einfach so... Dann wird eine andere Funktion in den Code eingefügt, zu der der Name der lokalen Variable passt, und Sie müssen ihn erneut ändern, nicht wahr? Ein externer Variablenname ist nicht nur ein Haufen Buchstaben, er hat eine bestimmte Bedeutung. Manchmal muss man lange nachdenken, um einen prägnanten Namen für diesen Parameter zu finden, und dann sagt man: Ändere ihn. Und alle Voreinstellungen sowie die Tester- und Optimierer-Einstellungen gehen für diesen Parameter verloren, wenn der Name geändert wird.

Angenommen, Sie haben eine Funktion von irgendwoher eingefügt, die vielleicht nicht einmal von Ihnen geschrieben wurde, so dass die Namen der lokalen Variablen dort absolut beliebig sein können.

 
Alexey Navoykov:

Sie haben eine etwas leichtfertige Sichtweise. Dann wird eine andere Funktion in den Code eingefügt, bei der die lokale Variable denselben Namen hat, und Sie müssen sie wieder ändern, nicht wahr? Der Name einer externen Variablen ist nicht nur eine Ansammlung von Buchstaben, sondern hat eine bestimmte Bedeutung. Manchmal muss man lange überlegen, um einen kurzen und prägnanten Namen für diesen Parameter zu finden, und dann heißt es: Ändern Sie ihn. Und alle voreingestellten Einstellungen sowie die Tester- und Optimierer-Einstellungen gehen für diesen Parameter verloren, wenn der Name geändert wird.

Angenommen, Sie haben eine Funktion von irgendwoher eingefügt, die vielleicht nicht einmal von Ihnen geschrieben wurde, dann können die Namen der lokalen Variablen dort absolut beliebig sein.

Tun Sie, was Sie für richtig halten, aber es sieht so aus, als hätten Sie keine großen Projekte geschrieben.

Es macht für mich keinen Sinn, mir meine Funktionsdefinitionen anzuschauen, denn ich habe einen klaren Unterschied in der Art der Deklaration von globalen und lokalen Variablennamen. Daher gibt es keine Probleme wie das Zusammentreffen von globalen und lokalen Variablennamen. Die Hauptsache ist, dass die Funktionen ihre Logik kollisionsfrei abarbeiten. In Ihrem Fall gibt es ein großes ABER, wenn Sie den Namen einer globalen Variable mit dem Namen einer lokalen Variable übereinstimmen, erwarten Sie Überraschungen, die Sie bereits zu klären begonnen haben.

Fügen Sie zum Beispiel ein zusätzliches _ in den Namen der lokalen Variablen ein, zum Beispiel _iCount. In diesem Fall werden Sie nie Probleme mit Variablennamen haben, weil Sie das erfüllen, was Sie mir beim zweiten Mal zu erklären versuchen - Variablen leben in einem lokalen Bereich, in dem sie erstellt wurden. Und keine globale Variable wird in diesem Fall keine Mehrdeutigkeit in die Namen bringen. Und lassen Sie uns die Diskussion an dieser Stelle beenden.

 

Um auf meinen vorherigen Beitrag zurückzukommen. MT4/845, Windows7/64 bit, Skript:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

Ergebnis:


Verwaltung, in DoubleToString hinzufügen, dass diese Funktion Fließkommazahlen auf die angegebene Genauigkeit rundet.

 

Es ist eine gute Idee, lokale und Eingabevariablen nicht gleich zu benennen

 
Комбинатор:

Es ist eine gute Idee, lokale und Eingabevariablen nicht gleich zu benennen

Auf eine gute Art und Weise, ja, aber manchmal, wenn man den Code von jemand anderem repariert, seine eigenen Bibliotheken damit verbindet, und... bam...
 

Versuchen Sie, die Zeile in ME in der angehängten Datei ohne Leerzeichen fortzusetzen

Dateien:
comment.mq5  1 kb
 
Ist es in Ordnung, bei der Erörterung eines Themas einen Link zu einem Produkt auf dem Markt zu setzen? Oder würde das als Werbung gelten und verboten sein?
 
Yousufkhodja Sultonov:
Ist es in Ordnung, bei der Erörterung eines Themas einen Link zu einem Produkt auf dem Markt zu setzen? Oder würde das als Werbung gelten und verboten sein?
Jedes Produkt hat zwei Registerkarten: Diskussion (für diejenigen, die gerade über einen Kauf nachdenken) und Bewertungen (für diejenigen, die bereits gekauft haben). Hier finden Diskussionen über das Produkt statt.
 

Fragwürdiges Kompilierungsergebnis nach Operator ? :

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
Ergebnis: 65618 (wie konnte das passieren?) und es sollte ein Kompilierfehler auftreten
Grund der Beschwerde: