Deine Heuristik (also die if-then-else-Dinger) entscheiden anhand von Bedingungen, was als nächstes zu zun ist.
Was bedeutet es denn, wenn a=0 und b=0 ist?
Und was, wenn a=0 aber b zwischen 1 und 9?
Erstelle eine Enumeration, die die Ergebnisse der Einzelentscheidungen wiederspiegelt. Z.B.
Delphi-Quellcode:
Type
TErgebnisse = (erKeinErgebnis, erAllesIstNull, erNurBistOK, erNurAIstOK,erBAußerhalb, erAAußerhalb,erAIstOkUndBAußerhalb);
Function ParameterAuswertung (a,b : Integer) : TErgebnisse;
Begin
if (a=0 und b=0) then
Result := erAllesIstNull
else if (a=0 und b>0 und b<10) then
Result := erNurBistOK
else if (a=0 und b=10) then
Result := erBAußerhalb
else if (a>0 und a<5 und b=0) then
Result := erNurAIstOK
else if (a>0 und a<5 und b=10) then
Result :=erAIstOkUndBAußerhalb
else if (a=5 und b=0) then
Result := erAAußerhalb
else
Result := erKeinErgebnis
End;
...
Case ParameterAuswertung (a,b) of
erKeinErgebnis :
Fehler!
erAllesIstNull :
Anweisung1;
erNurBistOK :
Anweisung2;
erNurAIstOK :
Anweisung3;
erBAußerhalb :
Anweisung4;
erAAußerhalb :
Anweisung5;
end;
(Das soll nur ein Beispiel sein und ist nicht 1:1 mit deinem Code kompatibel)
Die schlecht lesbare Auswertung ist verlagert, dafür ist der Code nun viel übersichtlicher und beschreibt sich wesentlich genauer.
Aus schlecht lesbarem (richtig beobachtet) Kauderwelsch wird so sehr gut lesbarer Code. Dieser ist nun auch leicht erweiterbar und durch das Umformen wurde ein Fehler sichtbar (keine Defaultaktion, Entscheidungsfindung war unvollständig)
Alternativ kannst Du nun deine Entscheidungsfindung (ist A zu klein, zu groß, ok? und B?) noch verfeinern bzw. refaktorisieren.