Wie lautet die Operatorrangfolge in Visual Basic 6.0 (VB6)?Wie lautet die Operatorrangfolge in Visual Basic 6.0?
Insbesondere für die logischen Operatoren.
Wie lautet die Operatorrangfolge in Visual Basic 6.0 (VB6)?Wie lautet die Operatorrangfolge in Visual Basic 6.0?
Insbesondere für die logischen Operatoren.
logische Operation Präzedenzreihenfolge
Not
And
Or
Xor
Eqv
Imp
Vergleich Vorgangs- Präzedenzreihenfolge
=
<>
<
>
<=
>=
Like
, Is
Rechenoperation Präzedenzreihenfolge
^
-
(unäre Negation)*
, /
\
Mod
+
, -
(binäre Addition/Subtraktion)&
Quelle:Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence
Es hängt davon ab, ob Sie im Debugger sind . Wirklich. Nun, irgendwie.
Klammern stehen natürlich an erster Stelle. Dann Vergleiche (>, <, =, etc). Dann die logischen Operatoren. Der Trick ist, dass die Reihenfolge Ausführung nicht definiert ist.Das bedeutet, dass Sie den folgenden Ausdruck gegeben:
If A < B And B < C Then
Sie garantiert, dass die < Betreiber sowohl vor dem logischen ausgeführt werden und der Vergleich. Sie können jedoch nicht garantieren, welcher Vergleich zuerst ausgeführt wird.
IIRC, der Debugger wird von links nach rechts ausgeführt, aber die kompilierte Anwendung wird von rechts nach links ausgeführt. Ich könnte sie rückwärts haben (es ist lange her), aber das Wichtigste ist, dass sie anders sind. Die tatsächliche Rangfolge ändert sich nicht, aber die Reihenfolge der Ausführung könnte sich ändern.
Sehr wenige Sprachen geben die genaue Reihenfolge der Auswertung in einer solchen Aussage - in der Regel Compiler sind die Freiheit gegeben, es so zu machen, wie es als effizienter/schnell/sicher/etc. Man sollte keinen Code schreiben, der von der Reihenfolge der Ausführung in irgendeiner Sprache abhängig ist! –
Wenn Sie Code geschrieben haben, der in einem solchen Ausdruck von der Reihenfolge der Ausführung abhängt, verdienen Sie alles, was Sie bekommen! "Schreiben Sie immer so, als ob die Person, die Ihren Code beibehält, ein gewalttätiger Psychopath ist, der weiß, wo Sie leben." – MarkJ
Joel, bedeutet das, dass eine ODER-Operation (immer) nicht in der Lage sein wird, die rechte Seite zu überspringen, wenn die linke als wahr und die gleiche für AND und false auswertet? – Oskar
EDIT: Das ist mein Rat für neuen Code! Aber Oscar liest den Code eines anderen, also muss es irgendwie herausfinden. Ich schlage das VB6-Handbuch Operator Precedence vor. Leider scheint dieses Thema nicht in der MSDN online VB6 manual zu sein, deshalb werde ich hier die logischen Operatorinformationen einfügen. Wenn Sie die VB6-Hilfe (die MSDN-Bibliothek) installiert haben, haben Sie sie auf Ihrem Computer.
Logische Operatoren werden in der folgenden Reihenfolge der Rangfolge ausgewertet:
Not And Or Xor Eqv Imp
Das Thema wird auch Vorrang für den Vergleich und die arithmetischen Operatoren.
Ich würde vorschlagen, sobald Sie den Präzedenzfall herausgefunden haben, setzen Sie in Klammern, es sei denn, es gibt einen guten Grund, den Code nicht zu bearbeiten.
Eine gute Option, wenn ich nicht den Code einer anderen Person lesen musste ... – Oskar
Ooh, ich fühle deinen Schmerz. Ich habe meiner Antwort noch etwas hinzugefügt. Der Operator Vorrang ist in der VB6 Hilfe – MarkJ
+1 für den Rat, da es immer noch ein guter Rat ist. Nebenbei bemerkt verstehe ich nicht, warum die Leute versuchen, so viele Operatoren in eine einzige Codezeile zu stopfen. Manchmal wünsche ich, dass Sprachen die Priorität * no * haben, damit die Leute Klammern benutzen müssen, um klarzumachen, was zum Teufel sie zu erreichen versuchten. Ich denke, es gibt immer Lisp ... –
Was ist der Auftrag? Vom niedrigsten zum höchsten? –
Die Darstellung der Antwort kann leicht irreführend sein. Die Reihenfolge innerhalb der drei Kategorien ist die vorletzte, aber die Reihenfolge der Kategorien selbst ist "Last-to-First": In Wirklichkeit werden arithmetische Operationen vor Vergleichsoperationen ausgewertet, die vor logischen Operationen ausgewertet werden. Für eine klarere Darstellung würde ich vorschlagen, die Antwort zu präsentieren, indem zuerst arithmetische Operationen gefolgt von Vergleichsoperationen gefolgt von logischen Operationen durchgeführt werden. Gute Referenz auch hier: https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/operator-precedence –