Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Nun, ich habe auf der zweiten Seite zugestimmt, dass wir in diesem Fall nicht von einem Fehler im Compiler sprechen sollten, sondern von einem Fehler im Gehirn der Entwickler. Nichts für ungut, ich habe diesen Thread eher zum Lachen gemacht.
Was ich jetzt nicht verstehe, ist Folgendes.
Worauf basiert die Entwicklung des MQL-Compilers? Wenn sie in einer normalen Sprache entwickelt wurde, müssen die Programmierer von der Tatsache verrückt geworden sein, dass Multiplikations- und Additionsoperationen die gleiche Priorität haben. Wie hätten sie das übersehen können? Setzt wirklich jeder Klammern, wo er will und wo er nicht will? Übrigens, auch zu viele Klammern machen den Code übersichtlicher. Und wenn Ihre Programmierer arithmetische Operationen wie 2+3*4 schreiben, schreiben sie auch 2+(3*4), oder Gott bewahre, dass sich ein Fehler in einem C++-Compiler einschleicht und die Verschachtelung von 100 Klammern in einem Ausdruck manuell gezählt wird:)
Dies ist ein Fehler in den Gehirnen von C-, Java-, Fortran-, MathCad- usw. usw. Entwicklern.
Wie du es immer noch nicht kapierst!
ZS
Obwohl ich zugeben muss, dass es auch bei mir eine Weile gedauert hat, bis ich es begriffen habe.
Obwohl ich zugeben muss, dass es auch bei mir eine Weile gedauert hat, bis ich das erkannt habe.
Erst jetzt wurde klar, warum einige logische Kombinationen nicht richtig funktionieren wollten. Ich musste künstliche Klammern hinzufügen.
Ich konnte es vorher nicht erklären. Aber ich habe das Thema auch nicht angesprochen. Durch Herumstochern habe ich die richtige Lösung gefunden. Aber wie oft musste ich herumstochern, um alles zu ändern?
Erst jetzt wurde klar, warum einige logische Kombinationen nicht richtig funktionieren wollten. Ich musste künstliche Klammern hinzufügen.
Zuvor gab es keine Erklärung dafür. Aber ich habe es auch nicht erwähnt. Durch Herumstochern habe ich die richtige Lösung gefunden. Aber wie oft musste ich herumstochern, um alles zu finden?
RTFM
*rofl*
Natürlich nicht alle hintereinander, aber ich tue es immer. Und zwar aus reiner Gewohnheit, lange bevor ich von diesem "Fehler im Kopf der Entwickler" erfuhr. Und warum muss ich mich noch einmal in die Hilfe vertiefen, um die Prioritäten herauszufinden, wenn ich auch ohne sie auskommen kann, indem ich Klammern setze? Für mich war dieser "Bug" also keine Katastrophe, auch wenn er mich amüsiert hat.
Und früher, als ich etwas Boolesches in C geschrieben habe, habe ich sie auch gesetzt, obwohl ich keine Zweifel an den Prioritäten hatte. Um ehrlich zu sein, glaube ich, dass ein komplexer boolescher Ausdruck ohne Klammern nicht sehr lesbar ist.
P.S. Bitte verwenden Sie nicht so ein schwachsinniges Beispiel wie 2+3*4. Wäre ein solch kluger Schachzug mit Prioritäten bei arithmetischen Operationen geschehen, hätte ich absolut keine Skrupel, dies als echten Fehler zu bezeichnen.
Im Übrigen:
x 1 oder (x 2 und x 3 ) = (x 1 oder x 2 ) und (x 1 oder x 3 )
x 1 und (x 2 oder x 3 ) = (x 1 und x 2 ) oder (x 1 und x 3 )
Daraus folgt, dass aus der Sicht der Booleschen Algebra die Operationen und und die gleiche Priorität haben.
Andrei, wie kommst du zu dem Schluss, dass die Prioritäten dieser Operationen in der Booleschen Algebra gleich sind? Gegenbeispiel:
bei a=1, b=0, c=0
(a oder b) und c = (1 oder 0) und 0 = 0
a oder (b und c) = 1 oder (0 und 0) = 1
In welcher Sprache wird der MQL-Compiler entwickelt? Denn wenn sie in einer normalen Sprache entwickelt wird, hätten die Programmierer zunächst einmal schockiert sein müssen, dass ihre Multiplikations- und Additionsoperationen die gleiche Priorität haben. Wie hätten sie das übersehen können?
Nun, hier ist ein weiteres Beispiel für Übertreibung. Dennoch berichtet der Themenstarter, dass er den Thread als Scherz begonnen und die Dokumentation zu diesem Zeitpunkt bereits gelesen hatte.
Nun, hier ist ein weiteres Beispiel für Übertreibung. Der Initiator sagt jedoch, dass er das Thema als Scherz begonnen hat und die Dokumentation inzwischen gelesen hat.
Ich hab's :-) Vielleicht stimmt es ja, dass große Entdeckungen in aller Ruhe und mit ganz unterschiedlichen Zielen gemacht werden.
Ich habe genug davon :-). Vielleicht stimmt es ja, dass große Entdeckungen in aller Ruhe gemacht werden, und zwar zu ganz anderen Zwecken.
Diese "Entdeckung" kann kaum als große Entdeckung bezeichnet werden. Es lohnt sich, diese Tatsache festzustellen und sie zu vergessen. Im Allgemeinen ist das Thema der Priorität boolescher Operationen weit hergeholt: Es wäre für die Entwickler billiger, die Bildung boolescher Ausdrücke mit verschiedenen Operationen ohne Klammern einfach zu verbieten und solche Konstruktionen als ungültig zu betrachten.
Andrew, woraus leiten Sie eigentlich ab, dass die Prioritäten dieser Operationen in der Booleschen Algebra gleich sind? Gegenbeispiel:
bei a=1, b=0, c=0
(a oder b) und c = (1 oder 0) und 0 = 0
a oder (b und c) = 1 oder (0 und 0) = 1
a = schön
b = intelligent
c = reich
x = a && b && c ;
y = a || b || c ;
Ich frage mich, was dir lieber ist, Andrej: x = 1 oder y = 1?
Andrew, woraus haben Sie eigentlich abgeleitet, dass die Prioritäten dieser Operationen in der Booleschen Algebra gleich sind?
Von der Symmetrie der Operationen. Und die Symmetrie der Operationen ergibt sich direkt aus den zugeordneten Formeln.
Eine symmetrische Operation kann keinen Vorrang vor einer anderen haben.
Ich frage mich, was Andrey vorziehen würde: x = 1 oder y = 1?
Ich würde es vorziehen, Eric, zu argumentieren, ohne persönlich und spöttisch zu werden.
___________________________________
Wie auch immer, ich will damit sagen.
Das Ergebnis des Ausdrucks A && B || C ist im Sinne der Booleschen Algebra undefiniert.