Wenn du zusammenfassen willst, dann hätte ich es so gemacht:
Code:
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)
Folglich:
Delphi-Quellcode:
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);
Wenn's dann noch weiter verkürzt werden soll, kann man's auch vollständig machen:
Code:
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
Um's kürzer zu machen, beziehe ich schon mal das Ergebnis von vorher mit ein.
Code:
(not p) or (p and (not q) and (not r))
Das heißt:
Delphi-Quellcode:
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));
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.
[edit]Ein (Tipp-)Fehler weniger.[/edit]