2008-09-10 6 views

Antwort

13

logische Operation Präzedenzreihenfolge

  1. Not
  2. And
  3. Or
  4. Xor
  5. Eqv
  6. Imp

Vergleich Vorgangs- Präzedenzreihenfolge

  1. =
  2. <>
  3. <
  4. >
  5. <=
  6. >=
  7. Like, Is

Rechenoperation Präzedenzreihenfolge

  1. ^
  2. - (unäre Negation)
  3. *, /
  4. \
  5. Mod
  6. +, - (binäre Addition/Subtraktion)
  7. &

Quelle:Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence

+0

Was ist der Auftrag? Vom niedrigsten zum höchsten? –

+1

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 –

9

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.

+0

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! –

+0

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

+1

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

2

Verwenden Sie Klammern


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.

+2

Eine gute Option, wenn ich nicht den Code einer anderen Person lesen musste ... – Oskar

+0

Ooh, ich fühle deinen Schmerz. Ich habe meiner Antwort noch etwas hinzugefügt. Der Operator Vorrang ist in der VB6 Hilfe – MarkJ

+1

+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 ... –

Verwandte Themen