Seite 1 von 1

OR _OR_ AND _AND_

Verfasst: 5. Oktober 2013, 07:33
von Herbert
Bin soeben über die aus meiner Sicht verkehrte Interpretation der mathematischen Verknüpfungen in Windev gestolpert.
OR, AND ohne die Underscores durchläuft stets den ganzen Satz
_OR, _AND_ brechen bei Erfüllen eines Teils ab

Code: Alles auswählen

IF (NOT bHhwn AND ZLDATEN.VERZABH) OR (bHhwn AND WIN_Daten.CBOX_verzbh) THEN
heisst, dass bei bhwn=false und zldaten.vertabh=true trotzdem eine Fehlermeldung kommt, wenn das Objekt WIN_Daten nicht exisitiert.

Code: Alles auswählen

IF (NOT bHhwn AND ZLDATEN.VERZABH) _OR_ (bHhwn AND WIN_Daten.CBOX_verzbh) THEN
funktioniert dann.

Re: OR _OR_ AND _AND_

Verfasst: 8. Oktober 2013, 22:10
von Lewi
heisst, dass bei bhwn=false und zldaten.vertabh=true trotzdem eine Fehlermeldung kommt, wenn das Objekt WIN_Daten nicht exisitiert.
Mal abgesehen davon, wenn das Objekt "Win_Daten" nicht existieren würde, wird in diesem Fall ein Compiler-Fehler angezeigt. ;-)

Der Unterschied zischen AND und _AND_ im Zuge einer "Verknüfung" ist der, dass die zweite Bedingung nicht geprüft wird, wenn die erste nicht erfüllt wird (Stichwort: Laufzeitoptimierung). In anderen Hochsprachen gibt es dafür einen Compiler-Schalter ( wie z.B. auch bei xBase++).

Re: OR _OR_ AND _AND_

Verfasst: 24. Oktober 2013, 00:40
von BRANDELH
soweit ich mich erinnere liegt der Unterschied bei der Interpretation in _OR_ (binärer Vergleich) und OR (logischer Vergleich), wobei Unterschiede auftreten können.

Re: OR _OR_ AND _AND_

Verfasst: 24. Oktober 2013, 10:52
von Herbert
Nein, das "_" dient einzig der Optimierung. Erfüllt der erste Teil die Bedinungung nicht, wird der zweite Teil nicht angesehen. So darf eben im zweiten Teil ein nicht existierendes Objekt vorkommen, ohne dass ein Fehler auftritt.

Re: OR _OR_ AND _AND_

Verfasst: 25. Oktober 2013, 15:15
von BRANDELH
OK, hatte ich vergessen. Aber es lag ja nahe, da _TO_ auch nur einmalig den Endpunkt ermittelt, während TO das in jeder Schleife tut.

Re: OR _OR_ AND _AND_

Verfasst: 19. Dezember 2014, 11:35
von Magic
Hi,

abgesehen von dem o.g. nicht existierendem Objekt der zu Fehler führen könne,
was spricht dagegen die optimierten Anweisungen _OR_ und _AND_ standardmäßig immer zu verwenden? Mir fällt bisher nichts ein warum ich es nicht tun sollte. Aber warum gibt es immer noch beides? Warum wurde dann nicht einfach das normale OR / AND optimiert?

Soll damit irgendwelche Kompatibilität bewahrt werden?

Re: OR _OR_ AND _AND_

Verfasst: 19. Dezember 2014, 23:43
von BRANDELH
Genau weiß ich es nicht, aber es gibt zwei Gründe die mir einfallen um beides stehen zu lassen:

1. man möchte dass immer alle Funktionen durchlaufen werden, weil dort z.B. Steuerungsaufgaben durchgeführt werden.
2. es könnte sein, dass die optimierte Form nicht passt, weil die Bedingungen sich ändern (ob das hier tatsächlich Sinn mancht weiß ich nicht).
Beispiel FOR TO ermittelt bei jedem Durchlauf den Endwert neu, FOR _TO_ optimiert das in den Fällen wo der Endwert immer gleich ist, weil er z.B. vorher einmalig ermittelt wurde.

Re: OR _OR_ AND _AND_

Verfasst: 22. Dezember 2014, 12:40
von Herbert
... und bitte daran denken, dass in Windev AND wie OR gleichberechtigt sind. Also bitte immer Klammern setzen!
nur in SQL-Filtern und SQL-Queries ist AND bevorzugt (das was ich eigentlich immer erwarte)!

Re: OR _OR_ AND _AND_

Verfasst: 22. Dezember 2014, 13:32
von Magic
BRANDELH hat geschrieben:man möchte dass immer alle Funktionen durchlaufen werden
Ok, wenn man tatsächlich mehrere Funktionen aufruft die alle ausgeführt werden sollen und dann auf dem Rückgabewert reagieren will
Dann liefert z.B. IF funkton1() = True AND funktion2() = True AND funktion3() = True THEN ..., ein anderes Ergebnis als die selbe IF Anweisung mit _AND_.
Das muss man in der Tat berücksichtigen!
Herbert hat geschrieben:Also bitte immer Klammern setzen!
Setze ich persönlich so oder so immer in Klammer. Erleichtert auch das Lesen des Quellcodes.

Re: OR _OR_ AND _AND_

Verfasst: 24. Dezember 2014, 22:51
von BRANDELH
Herbert hat geschrieben:... und bitte daran denken, dass in Windev AND wie OR gleichberechtigt sind. Also bitte immer Klammern setzen!
nur in SQL-Filtern und SQL-Queries ist AND bevorzugt (das was ich eigentlich immer erwarte)!
ehrlich gesagt weiß ich gar nicht wie das bei anderen Sprachen so ist, aber ich setzte die Klammern auch deshalb um mir später sicher zu sein, wie es gedacht war.