Wünsche für MT5 - Seite 103

 
A100:

ME5 gibt beim Kompilieren einen Fehler aus, der meiner Meinung nach ungerechtfertigt ist.


Gutes Argument - wird gemacht.
 

Ich möchte, dass die vordefinierte Aufzählung der Form ENUM_XXX tatsächlich mit 1 nummeriert wird, während sie derzeit standardmäßig mit 0 nummeriert ist. Die Frage bezieht sich nicht auf die Änderung der Standardwerte, sondern auf das Ersetzen von

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY,
        ORDER_TYPE_SELL, ...
};

sollte es sein

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY = 1,
        ORDER_TYPE_SELL, ...
};

Die Argumentation lautet wie folgt - ein Beispiel:

MqlTradeRequest request { ...
        ENUM_ORDER_TYPE     type; ...
}

Wenn ich den Wert request.type irgendwo im Code analysiere und er gleich 0 ist, kann ich nicht verstehen, ob er nicht initialisiert wurde oder initialisiert wurde.

request.type = ORDER_TYPE_BUY;

Dies ist bei den meisten vordefinierten Enums der Form ENUM_ XXX äquivalent zu RadioButton der Fall und erfordert einen unverhältnismäßig hohen Aufwand, um die aktuelle Situation korrekt zu behandeln

 
Leider ist dies aus Gründen der Kompatibilität mit den übrigen Sprachen, in denen die Nummerierung von Grund auf neu ist, nicht möglich.
 
Renat: Leider ist dies aus Gründen der Kompatibilität mit anderen Sprachen, in denen die Nummerierung von Null an erfolgt, nicht möglich.

Was hindert Sie daran, einen neutralen Bezeichner als erstes Mitglied einer vordefinierten Aufzählung zu schreiben? Zum Beispiel:

enum ENUM_ORDER_TYPE 
  {
   ORDER_TYPE_undefined,
   ORDER_TYPE_BUY,
   ORDER_TYPE_SELL, 
   ...
  };

Sowohl die "Nummerierung von Null" bleibt erhalten, als auch nicht initialisierte Variablen können einfach ausgewertet werden.

 
Yedelkin:

Was hindert Sie daran, einen neutralen Bezeichner als erstes Mitglied einer vordefinierten Aufzählung zu schreiben? Zum Beispiel:

Und wenn Sie an die anderen denken, die bereits den ursprünglichen Satz von Enums verwenden? Ganz zu schweigen von den verblüfften Blicken des gesamten Serverkomplexes.

Im Allgemeinen ist die Frage nicht richtig gestellt. Der Entwickler sollte nicht faul sein und den Rest der Welt zwingen, sich an ihn anzupassen, indem er eben diese Welt selbst zerstört.

 
Renat: Und wenn Sie an andere denken, die bereits den ursprünglichen Satz von Enums verwenden?

Nun, denken wir noch einmal "über die anderen" nach. Wozu dienen benannte Konstantenbezeichner? - Richtig, um diese Identifikatoren zu verwenden. Außerdem müssen Sie für die Verwendung dieser Bezeichner nicht unbedingt wissen, welche spezifischen Werte den Aufzählungsmitgliedern zugeordnet sind. Oder gehen Sie davon aus, dass kompetente Programmierer Bezeichner verwenden, anstatt die Standardwerte von Enum-Mitgliedern herauszufinden, und dann Prüfungen auf der Grundlage dieser Standardwerte durchführen?

Renat : Ganz zu schweigen von der verwirrenden Aussicht auf den gesamten Serverkomplex.

D.h., es ist nicht schwer, den Vorschlag selbst umzusetzen, oder?

Renat : Eigentlich ist diese Frage falsch gestellt. Der Entwickler sollte nicht faul sein und den Rest der Welt zwingen, sich an ihn anzupassen, indem er diese Welt selbst zerstört.

Der Verfasser dieses Threads hatte nicht die Absicht, durch seine Faulheit die Welt anderer Menschen zu zerstören. Er hat lediglich einen konkreten Verbesserungsvorschlag gemacht. Und erklärt, dass sich der Nullwert als überlastet erweist.

 

Ich möchte zumindest eine Klasse als Geltungsbereich für enum-benannte Elemente einführen,

void test1() { enum ENUM_1 { ELEM1 }; }
void test2() { enum ENUM_2 { ELEM1 }; } //ошибка

class A {
        enum ENUM_A { ELEM1 };
};
class B {
        enum ENUM_B { ELEM1 }; //ошибка
};

Begründung für Klassen: Sie müssen sich einen eindeutigen Namen ausdenken, der unerwartet mit Bibliotheksnamen (auch von Dritten) und/oder vordefinierten Namen in Konflikt geraten kann. Außerdem können Sie ähnliche Namen von SL-, TP-, PRICE- usw. Enum-Elementen in mehreren Klassen gleichzeitig verwenden, ohne Konflikte befürchten zu müssen.

Begründung für die Funktionen: nicht kritisch, aber gleichzeitig

 
A100:

Wir möchten einen Geltungsbereich für enum-benannte Elemente einführen

Grundprinzip für Klassen: Sie müssen sich einen eindeutigen Namen ausdenken, der unerwartet mit einer Bibliothek und/oder einem vordefinierten Namen in Konflikt geraten kann. Außerdem könnten Sie ähnliche Namen für SL-, TP-, PRICE- usw. Enum-Elemente in mehreren Klassen gleichzeitig verwenden, ohne Konflikte befürchten zu müssen.

Begründung für die Funktionen: nicht kritisch, aber gleichzeitig

Wie sieht es in C++ aus?
 
sergeev:
Aber wie sieht es in C++ aus?

Das ist, wo die Beine kommen aus - ein Paradox, aber erst jetzt (wenn es Einschränkungen), begann ich zu verstehen, warum alles dort getan wurde :)

Natürlich könnte man darauf verzichten - einen eindeutigen Namen für alle Klassen zu schreiben, aber für große Programme und besonders für Bibliotheken, die für den allgemeinen Gebrauch bestimmt sind - ist keine Option

 
A100: Ich möchte, dass vordefinierte Enums der Form ENUM_XXX, die eigentlich RadioButton entsprechen, mit 1 nummeriert werden, während sie jetzt standardmäßig nummeriert sind, d. h. 0. Die Frage ist nicht über die Änderung der Standardwerte, sondern ...

Versuchen Sie dies (für "Initialisierung"):

WRONG_VALUE.

Eine Konstante kann implizit in einen beliebigen Aufzählungstyp umgewandelt werden.

-1