AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auswertung von logisch verknüpften Statements
Thema durchsuchen
Ansicht
Themen-Optionen

Auswertung von logisch verknüpften Statements

Ein Thema von Xong · begonnen am 4. Nov 2008 · letzter Beitrag vom 4. Nov 2008
Antwort Antwort
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#1

Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 14:46
Hallo lieber DPler!

Wie wertet der Compiler logisch verknüpfte Boolsche Variablen aus?

Dazu folgendes Beispiel:
Delphi-Quellcode:
function tueDies : Boolean;
begin
  // Mach was...
  Result := True;
end;

function tueDas : Boolean;
begin
  // Mach noch was...
  Result := False;
end;
Was passiert nun bei folgendem Code?
Delphi-Quellcode:
if tueDies OR tueDas then // ergibt True OR False := True
  foo := 'bar';
In (ANSI-)C/C++ würde tueDas nicht aufgerufen werden, da das Statement in der IF-Bedingung sowieso wahr sein wird.
Wie reagiert der Delphi-Compiler?
Gibt es einen festgelegten Standard?

Ich danke für eure Hilfe.

LG,
Xong

PS: Konkreter Hintergrund der Frage ist zum einen pures Interesse und zum anderen das Überprüfen und Anlegen eines Verzeichnisses:
Delphi-Quellcode:
if VerzeichnisExistiert(DirName) OR LegeVerzeichnisAn(DirName) then
  // Verzeichnis existiert, also kann damit gearbeitet werden
else
  // Verzeichnis existiert nicht -> Fehlermeldung
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 14:49
Die Compilereinstellung "Boolsche Ausdrücke vollständig" steuert das verhalten ob die Auswertung frühzeitig abgebrochen wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 14:58
Zitat von Bernhard Geyer:
Die Compilereinstellung "Boolsche Ausdrücke vollständig" steuert das verhalten ob die Auswertung frühzeitig abgebrochen wird.
Danke, Bernhard. Danach habe ich gesucht.

Und ein Zusatz aus der Delphi-Hilfe noch: Voreingestellt ist der Status {$B} für das Kurzschlussverfahren.

LG,
Xong
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 15:09
Praktisch ist das vor allem bei so Konstrukten wie:
  if Assigned(MyObject) and (MyObject.ValueA = ValueB) then ... Man muss nur drauf achten immer brav FreeAndNil() zu nutzen bzw. das "Nilen" nicht zu vergessen. Da aber FreeAndNil bei mir in Fleisch und Blut ist, nutz ich sowas ganz gerne. Bei vollständiger Auswertung würd es eben ggf. knallen, oder man müsste zwei Statements draus machen.

Das aber nur so am Rande ohne Beitrag zur eigentlichen Frage
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 15:18
auf die Füße fallen kann einem das hingegen bei Sachen wie:
Delphi-Quellcode:
if variable or Funktionsaufruf() then
...
Denn wenn man in dem Funktionsaufruf die Variable ändert etc. und nicht bedenkt das die Funktion eventuell nicht aufgerufen wird kommen tolle Effekte zu stande.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: Auswertung von logisch verknüpften Statements

  Alt 4. Nov 2008, 15:44
Hallo
Zitat von SirThornberry:
auf die Füße fallen kann einem das hingegen bei Sachen wie:
Delphi-Quellcode:
if variable or Funktionsaufruf() then
...
Denn wenn man in dem Funktionsaufruf die Variable ändert etc. und nicht bedenkt das die Funktion eventuell nicht aufgerufen wird kommen tolle Effekte zu stande.
Oja, das Kurzschlussverfahren kann so seine Tücken haben.
Es ist praktisch, wenn man zuerst eine Variabel und dann ein (nicht initialisiertes) Objekt abfragt. Da kommt man dann schonmal an 'ner Schutzverletzung vorbei. Aber ansonsten muss man bei der Reihenfolge der abzufragenden Werte schonmal höllisch aufpassen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz