AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ausführung von Boolschen-Vergleichen

Ein Thema von Jumpy · begonnen am 12. Nov 2012 · letzter Beitrag vom 13. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Ausführung von Boolschen-Vergleichen

  Alt 12. Nov 2012, 14:45
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:
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;
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?
Die Job-Objekte werden später innerhalb der Factory-Klasse freigegeben, wenn diese selbst freigegeben wird.
Ralph

Geändert von TBx (12. Nov 2012 um 16:12 Uhr) Grund: Schreibfehler im Titel korrigiert, das tat in den Augen weh
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 14:50
Wenn du formatierst dann gibts oft schneller eine Antwort. Ich habs einfach erstmal formatiert.

Delphi-Quellcode:
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;
Edit:
Zitat:
Die folgende Konstruktion müsste das doch machen oder?
Ja das Programm geht alle Jobs durch und wenn Result einmal False war, wird es nicht mehr True.

(X and False) wenn einer der Booleans False wird, wird die "and-Verknüpfung" nie wieder True.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!

Geändert von Jonas Shinaniganz (12. Nov 2012 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.623 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 14:56
Statt
Zitat:
Result := j.Execute And Result;
kann man auch
Delphi-Quellcode:
if not j.Execute then
  Result := false;
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 15:07
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 15:28
Wenn du formatierst dann gibts oft schneller eine Antwort. Ich habs einfach erstmal formatiert.
War doch formatiert, wenn auch nur kurz und knapp
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:
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;
Hier mal die Version ala Bummi mit wegoptimierter Job-Variable, dann ist auch das nillen unnötig;
Ralph

Geändert von Jumpy (12. Nov 2012 um 15:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#6

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 15:55
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 Jobs.Count-1 zählst aber dann nicht Jobs.Items[I].Execute machst, sondern noch die JobFactory benutzt, um den Job rauszubekommen? Ist das Teil eines Patterns?

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
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!

Geändert von Jonas Shinaniganz (12. Nov 2012 um 16:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 16:02
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 JobResult := Job.Execute... und dann 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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 16:15
{$B+} bzw. {$BOOLEVAL ON} dürften das Zauberwort sein.
Boolesche Kurzauswertung
  • Warum das Boolesche heißt ist mir unklar - wäre auch eher bei boolsche bzw. bool'sche
  • Ist bis XE2 auch noch so gültig (Link zeigt zur Hilfe für D2007)

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#9

AW: Ausführung von Boolchen-Vergleichen

  Alt 12. Nov 2012, 18:36
[*]Warum das Boolesche heißt ist mir unklar - wäre auch eher bei boolsche bzw. bool'sche
Ich bin mal so frei, aus http://de.wikipedia.org/wiki/Boolesche_Variable zu zitieren
Zitat:
Boolesche Variable, benannt nach George Boole, sind Elemente einer booleschen Algebra. Sonderform ist die Schaltvariable (engl.: switching variable)
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Ausführung von Boolschen-Vergleichen

  Alt 13. Nov 2012, 07:43
- das hatte ich nach verfassen meines Beitrages auch gefunden. Man lernt nie aus

Aber das da ein Hilfe-Beitrag bearbeitet wurde, ohne das man jetzt noch sieht worauf ICH reagiert habe is schon interessant
-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
Schließlich sieht man an vom TE geänderten Thread-Titel (Ausführung von Boolschen-Vergleichen) und den Antwort-Titeln (Ausführung von Boolchen-Vergleichen) wie der Thread ursprünglich hieß und wie er zuerst aufgefordert wurde umbenannt zu werden

Einen schönen Tag Euch allen

Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:42 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