![]() |
Ausführung von Boolschen-Vergleichen
Hallo,
Eine Reihe von Jobs (Namen kommen aus einer Stringlist "Jobs" sollen hintereinander ausgeführt werden. Wenn da bei einem was falsch läuft, soll der Rest trotzdem gemacht werden, das Gesamtergebnis der Funktion soll aber false zurückliefern, wenn mind. ein Job einen Fehler hatte. Die folgende Konstruktion müsste das doch machen oder?
Delphi-Quellcode:
Ist die letzte Zuweisung j:=nil nötig/sinnvoll? Der Compliler sagt sowas ala j wird nie verwendet. Könnte man dass daher auch weglassen, da die Funktion ja danach zuende ist?
function TJoblist.ExecuteJobs:Boolean;
var i:Integer; j:TJob; begin Result:=true; for i:=0 to Jobs.Count-1 do begin j:=JobFactory.GetJob(Jobs[i]); Result:=j.Execute And Result; //Result:=Result And j.Execute; //So gehts nichtmehr nachdem einer false war if Assigned(fProgress) then fProgress; end; j:=nil; end; Die Job-Objekte werden später innerhalb der Factory-Klasse freigegeben, wenn diese selbst freigegeben wird. |
AW: Ausführung von Boolchen-Vergleichen
Wenn du formatierst dann gibts oft schneller eine Antwort. Ich habs einfach erstmal formatiert.
Delphi-Quellcode:
Edit:
function TJoblist.ExecuteJobs:Boolean;
var i : Integer; Job : TJob; begin Result := true; for i := 0 to Jobs.Count - 1 do begin Job := JobFactory.GetJob(Jobs[i]); Result := Job.Execute and Result; end; end; Zitat:
(X and False) wenn einer der Booleans False wird, wird die "and-Verknüpfung" nie wieder True. |
AW: Ausführung von Boolchen-Vergleichen
Statt
Zitat:
Delphi-Quellcode:
schreiben. Das Ergebnis sollte aber dasselbe sein. Und das Zuweisen von nil könnte höchstens im Zusammenhang mit COM-Interfaces von Belang sein, ansonsten dürfte es wegoptimiert werden.
if not j.Execute then
Result := false; |
AW: Ausführung von Boolchen-Vergleichen
wobei die andere Schreibweise bei so etwas wieder an Charme gewinnt
Delphi-Quellcode:
for i := 0 to Jobs.Count - 1 do
Result := JobFactory.GetJob(Jobs[i]).Execute and Result; |
AW: Ausführung von Boolchen-Vergleichen
Zitat:
Trotzdem aber danke, auch an alle anderen für die Bestätigung. War mir nämlich gerade irgendwie unsicher wie das nochmal war mit dem vorzeitigen Abbrechen Boolcher Auswertungen. Hatte nämlich ursprünglich die auskommentierte Version in #1 und da wurde das Execute nämlich logischerweise nicht mehr ausgeführt, wenn's einmal falsch war.
Delphi-Quellcode:
Hier mal die Version ala Bummi mit wegoptimierter Job-Variable, dann ist auch das nillen unnötig;
function TJoblist.ExecuteJobs:Boolean;
var i:Integer; begin Result:=true; for i:=0 to Jobs.Count-1 do begin Result:=JobFactory.GetJob(Jobs[i]).Execute And Result; if Assigned(fProgress) then fProgress; end; end; |
AW: Ausführung von Boolchen-Vergleichen
Ich habe auch kurz überlegt die Hilfsvariable rauszunehmen. Jetzt ist die Zeile allerdings länger.
Kannst du mir noch kurz erklären warum du bis
Delphi-Quellcode:
zählst aber dann nicht
Jobs.Count-1
Delphi-Quellcode:
machst, sondern noch die JobFactory benutzt, um den Job rauszubekommen? Ist das Teil eines Patterns?
Jobs.Items[I].Execute
Okay stimmt, deine Formatierung ist einfach anders als meine. -klugscheiß- Ich bin mir jedoch sicher, das man Boolchen -> Boolesche schreibt. Wenn du dass korrigierst können andere später mit dem Suchwort "Boolesche" auch deinen Thread hier finden und davon profitieren. :) Grüße |
AW: Ausführung von Boolchen-Vergleichen
Diese optimierte AND-Behandlung wurde irgendwann mal eingeführt.
Ich denke, es gibt einen Schalter, um das auszuschalten, ich würde mich aber lieber danach richten und meinen Programmablauf danach ausrichten. Evtl. auch eine Variable zuweisen
Delphi-Quellcode:
und dann
JobResult := Job.Execute...
Delphi-Quellcode:
.
Result := Result and JobResult
Das ist eine Zeile mehr, verbessert aber ggf. die Übersichtlichkeit (reine Geschmachssache). Insofern würde ich auch eher mit dem "J" (oder besser "Job") arbeiten. Ein nilen am Schluss ist aber unnötig, da die Variable dann ja ohnehin nicht mehr gebraucht und verworfen wird. |
AW: Ausführung von Boolchen-Vergleichen
Delphi-Quellcode:
bzw.
{$B+}
Delphi-Quellcode:
dürften das Zauberwort sein.
{$BOOLEVAL ON}
![]()
Gruß, Chris |
AW: Ausführung von Boolchen-Vergleichen
Zitat:
![]() Zitat:
|
AW: Ausführung von Boolschen-Vergleichen
Zitat:
Aber das da ein Hilfe-Beitrag bearbeitet wurde, ohne das man jetzt noch sieht worauf ICH reagiert habe is schon interessant ;-) Zitat:
Einen schönen Tag Euch allen :-) Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz