Ein Neuankömmling fragt! - Seite 26

 
Alexander Bereznyak:

das sind Ihre Worte, es gibt keine Warnungen, aber es gibt sie wirklich

In welcher Welt leben Sie, was rauchen Sie, teilen Sie

Sie sind also so dreist, für mich zu behaupten, dass Sie meinen Code nicht sehen können? Haben Sie sich in den Pilzen geirrt?
 
Dmitry Fedoseev:
Sie behaupten also so dreist für mich über meinen Code, den Sie nicht sehen? Habt ihr euch nicht in den Pilzen geirrt?

Ich habe es, nicht ein Narr, haben Sie einen speziellen Compiler ohne Warnungen, speziell persönlich von MQ

PS: Ich will auch einen, gib ihn mir.

 
Михаил:

Der von Ihnen angegebene Code ist überhaupt nicht korrekt!

Das sollte so sein:

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

Falsch, denn dann gibt es einen Vergleich:

if(type==(long)POSITION_TYPE_BUY


Nein, das ist es nicht.

Das hat nichts damit zu tun.

Der Codewriter hat einfach überreagiert oder die Typumwandlung von irgendwoher kopiert.


in der Tat

Code

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

erzeugt keine Fehler oder Warnungen.

MQL erfordert keine explizite Umwandlung


PS. Prüfen Sie Ihre Annahmen, bevor Sie anfangen zu argumentieren.

 

ein sehr schlechtes Beispiel, wenn man sich bei einem Vergleich vertut und dann in einen Fehler läuft:

 
o_O:

PS. Prüfen Sie Ihre Annahmen, bevor Sie anfangen zu argumentieren.

Denken Sie bei Ihren Vorschlägen an die Konsequenzen
 
o_O:


Nein, das sind Sie nicht.

Das hat nichts damit zu tun.

Der Codeschreiber hat einfach überreagiert oder von einem anderen Ort abgeschrieben .


in der Tat

Code

erzeugt keine Fehler oder Warnungen.

MQL erfordert keine explizite Konvertierung


PS. Prüfen Sie Ihre Annahmen, bevor Sie anfangen zu argumentieren.

o_o!

Richtig - falsch....

Ich habe den Eindruck, dass Sie nicht lesen, was andere schreiben!

Nach den Regeln der Programmierung:

DIE ÜBERNEHMENDE FUNKTIONSVARIABLE MUSS VOM GLEICHEN TYP SEIN WIE DER RÜCKGABEWERT DIESER FUNKTION!

DAS IST ES!

Dies ist das Ende dieser Spekulation.

Warum haben Sie es nicht so geschrieben?

int type=PositionGetInteger(POSITION_TYPE);

Denn Sie wissen, dass die Funktion immer LONG zurückgibt.

Und der Verweis besagt eindeutig, dassder für das Argument POSITION_TYPE der FunktionPositionGetInteger() zurückgegebene Wert lautet

ist ENUM_POSITION_TYPE, nicht LONG

Und wenn Sie den Satzbau üben wollen, schreiben Sie ihn so:

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

Die Tatsache, dass der Compiler keine Fehlermeldung ausgibt, bedeutet nicht, dass Sie es richtig geschrieben haben!

Es zeigt den "freien Willen" des Compilers an und das ist alles! (Damit können Sie LONG und INTEGER vergleichen).

Das ist die RICHTIGE Art, mit dieser Situation umzugehen:

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

Ein sehr schlechtes Beispiel, Sie haben den Vergleich verpasst, und dann bekommen Sie einen Fehler:

Haben Sie irgendwo gesehen, wie es mit der Schriftumwandlung weitergeht? Begründen Sie Ihre Thesen nicht, indem Sie sich auf ein anderes Thema der Diskussion beziehen.

Hier geht es nur um den Vergleich und nur in diesem Fall ist long enum.


Sie haben sich bereits in das Dickicht der Gedanken begeben, obwohl die Frage direkt war, die von integer beantwortet wurde

Nextor257:

Bitte beraten Sie mich, denn ich verstehe nicht, was für ein Vergleich das sein soll.

if(type==(long)POSITION_TYPE_BUY)

Warum steht vor (lang) POSITION_TYPE_BUY ?


Dmitry Fedoseev:

Dies ist eine Änderung des Variablentyps im laufenden Betrieb.

 
Dmitry Fedoseev:

long und lon anstelle vonENUM_POSITION_TYPE undENUM_POSITION_TYPE

8 Zeichen (die man mit geschlossenen Augen tippen kann) statt 36 Zeichen (und in Großbuchstaben)! Darüber hinaus gibt es jede Menge Informationen, die keinen Sinn ergeben. Dies ist kein guter Programmierstil - unnötige Schrift und überflüssige Informationen.

In diesem Fall hat Mikhail absolut Recht (bei all meiner Abscheu vor Mikhails Programmierstil).

Und es geht nicht um mögliche Warnungen und schon gar nicht um die Anzahl der Zeichen, sondern um eine strenge Schreibweise. Die Aufzählung ENUM_POSITION_TYPE ist ein eindeutiger Datentyp. Es ist ENUM_POSITION_TYPE, nicht long oder int. Sie dürfen ihn nur als ENUM_POSITION_TYPE und nicht auf andere Weise verwenden. Und wenn Sie lange tippen, fängt die Autovervollständigungsfunktion beim dritten Zeichen an, und es gibt überhaupt kein Problem. Und das Problem liegt in der Verwendung von long, weil es fast alles sein kann, während ENUM_POSITION_TYPE das nicht ist.

o_O:

MQL erfordert keine explizite Umwandlung

Zuerst habe ich geschrieben, dass dies der Fall ist, aber dann habe ich das Wort "Vergleich" gesehen. Eigentlich ist im Vergleich dazu keine explizite Konvertierung erforderlich, da MQL sie implizit vornimmt. Und es wäre besser, dies überhaupt nicht zu tun, denn das Ergebnis ist oft undefiniert. In anderen normalen, streng typisierten Sprachen ist jedoch immer eine explizite Typumwandlung erforderlich.

P.S. Ausnahmsweise hat Michael mal eine kompetente Antwort gegeben, aber die Leute fingen auch hier an, über ihn herzuziehen, wie üblich. Vergeblich, denn in diesem Fall hat er Recht.

Grund der Beschwerde: