![]() |
Kürzung eines bool'schen Ausdruckes
Hallo!
Ich habe eine function, die folgender maßen aussieht:
Delphi-Quellcode:
Diesen habe ich versucht so zu "kürzen":
function TMainForm.CanFormat(Document: Integer): Booolean;
begin if IsIndexValid(Document) then begin if Dokumente[Document].EditorMode then { SynEdit speichert als TXT! } Result := False else Result := not Dokumente[Document].PlainText; end else Result := True; end;
Delphi-Quellcode:
Auf den Blick scheint er zu funktionieren, aber ich bin mir nicht sicher, ob der Ausdruck bei allen Konditionen das gleiche Ergebnis, wie der Original Ausdruck hat.
function TMainForm.CanFormat(Document: Integer): Booolean;
begin Result := not ((not (IsIndexValid(Document)) or ((Dokumente[Document].EditorMode) or (not (not Dokumente[Document].EditorMode) and (not Dokumente[Document].PlainText))))); end; Könnt ihr euch den unteren Ausdruck kurz anschauen und mir sagen, ob ich in korrekt umgeschrieben habe? Hat es überhaupt Sinn, den obigen Ausdruck soweit zu kürzen? Danke, mirage228 |
Re: Kürzung eines bool'schen Ausdruckes
Zitat:
Zitat:
|
Re: Kürzung eines bool'schen Ausdruckes
Hi!
Ich hätte den oberen gelassen wie er war. Bei Version 2 blickst weder du gewschweige denn ein anderer Programmierer durch. Außerdem glaube ich nicht, dass du viele Vorteile hast so. Ciao fkerber |
Re: Kürzung eines bool'schen Ausdruckes
Wenn du zusammenfassen willst, dann hätte ich es so gemacht:
Code:
Folglich:
p := isIndexValid(Document)
q := Dokumente[Document].EditorMode r := Dokumente[Document].PlainText p q Result -------------- f f t f t t t f not r t t f ((not p) and (not q)) or ((not p) and q) = (not p) and ((not q) or q) = (not p) and t = (not p)
Delphi-Quellcode:
Wenn's dann noch weiter verkürzt werden soll, kann man's auch vollständig machen:
if (p and (not q)) then
Result := not r else Result := not p; // bzw. if (isIndexValid(Document) and (not Dokumente[Document].EditorMode)) then Result := not Dokumente[Document].PlainText else Result := not isIndexValid(Document);
Code:
Um's kürzer zu machen, beziehe ich schon mal das Ergebnis von vorher mit ein.
p q r Result
------------------ f f f t f f t t f t f t f t t t t f f t t f t f t t f f t t t f
Code:
Das heißt:
(not p) or (p and (not q) and (not r))
Delphi-Quellcode:
Die Sinnhaftigkeit der vollständigen "Optimierung" sei mal dahingestellt. Übrigens könnte es gut sein, dass ich Fehler gemacht habe (auch dumme), ich bin nicht besonders wach im Moment.
Result := (not p) or (p and (not q) and (not r));
// bzw. Result := (not isIndexValid(Document) or (isIndexValid(Document) and (not Dokumente[Document].EditorMode) and (not Dokumente[Document].PlainText)); [edit]Ein (Tipp-)Fehler weniger.[/edit] |
Re: Kürzung eines bool'schen Ausdruckes
Hi,
danke erstmal für eure Antworten! Wenn ich den Code nachher selbst nicht verstehe, hat es keinen Sinn, einen zu komplizierten Ausdruck hinzuschreiben. So wie es d3g hier beschrieben hat, ist es wirklich sehr einleuchtend :thuimb: DieVorgehensweise finde ich sehr gut - da habe ich mal wieder was dazugelernt. Soweit ich getestet habe, ist der optimierter Ausdruck durchaus korrekt und auch leserlicher als meiner. Ich denke, ich werde den Ausdruck von dir verwenden. ;) Vielen Dank nochmal :thuimb: mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 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-2025 by Thomas Breitkreuz