OR _OR_ AND _AND_

Alle Themen rund um die Erstellung von Programmen
Antworten
Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

OR _OR_ AND _AND_

Beitrag 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.

Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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++).

Benutzeravatar
BRANDELH
Site Admin
Beiträge: 199
Registriert: 30. Juni 2010, 14:31
Wohnort: Germersheim
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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.

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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.

Benutzeravatar
BRANDELH
Site Admin
Beiträge: 199
Registriert: 30. Juni 2010, 14:31
Wohnort: Germersheim
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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.

Magic
Member
Beiträge: 51
Registriert: 2. September 2011, 13:48

Re: OR _OR_ AND _AND_

Beitrag 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?
Gruß,
Magic

Benutzeravatar
BRANDELH
Site Admin
Beiträge: 199
Registriert: 30. Juni 2010, 14:31
Wohnort: Germersheim
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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.

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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)!

Magic
Member
Beiträge: 51
Registriert: 2. September 2011, 13:48

Re: OR _OR_ AND _AND_

Beitrag 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.
Gruß,
Magic

Benutzeravatar
BRANDELH
Site Admin
Beiträge: 199
Registriert: 30. Juni 2010, 14:31
Wohnort: Germersheim
Kontaktdaten:

Re: OR _OR_ AND _AND_

Beitrag 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.

Antworten