Bin so frei und meckere ein bisserl rum
Dashier gefällt mir nicht:
Delphi-Quellcode:
procedure TKinokarten.BerechnePreisR1; //Preis R1 berechnen
begin
if Form1.ckbxR1.Checked then PreisR[1]:=Karten[1] * Rang1erm
else if not Form1.ckbxR1.checked then
PreisR[1]:= Karten[1] * Rang1;
end;
Hier ist es zwingend erforderlich, dass die Klasse TKinokarten irgendwie in einem Form1 liegt. Nutzt jemand sie in 'nem Formular fmKino, hat er ein unlösbares Problem.
Lieber sowas in der Art:
Delphi-Quellcode:
procedure TKinokarten.BerechnePreisR1(aErmaessigt : Boolean); //Preis R1 berechnen
begin
case aErmaessigt of
true : PreisR[1] := Karten[1] * Rang1erm;
false : PreisR[1] := Karten[1] * Rang1;
end;
end;
Oder auch sowas:
Delphi-Quellcode:
procedure TKinokarten.BerechnePreisR1(aErmaessigt : Boolean); //Preis R1 berechnen
begin
PreisR[1] := IfThen(aErmaessigt,Karten[1] * Rang1erm,Karten[1] * Rang1);
end;
Der Aufruf im Programm sähe dann so aus:
Kinokarten.BerechnePreisR1(ckbxR1.checked);
Alles, was zur Klasse TKinokarten gehört, würd' ich in eine
Unit Kinokarten auslagern und die dann in die Uses-Anweisung aufnehmen. Dann fallen so unglückliche Zugriffe auf Form1 innerhalb der Klasse sofort auf und man merkt, dass man hier eine ungünstige Konstruktion gewählt hat.
Dashier finde ich schön:
showMessage(format('Es wurden %d Karten im %d. Rang für '+inttostr(Rang1)+' Euro bzw. für ermäßigt '+inttostr(Rang1erm)+' Euro verkauft!',[20,1]));
Ein bisserl Format und ein bisserl auch nicht. Lieber sowas:
showMessage(format('Es wurden %d Karten im %d. Rang für %d Euro bzw. für ermäßigt %d Euro verkauft!',[20,1,Rang1,Rang1erm]));
Wobei: Für die 20 und die 1 (und alle ähnlichen Werte irgendwo im Quelltext) würd' ich zu den bereits vorhandenen Konstanten noch ein paar entsprechende dazu packen.
Wenn denn dann mal was geändert werden muss, dann hat man das alles an einer Stelle. Später könnte man dann noch überlegen, ob man die Werte der Konstanten nicht in der Prozedure Init aus 'ner Ini-Datei (oder Ähnlichem) liest. Dann kann man die Preise und das Platzangebot ändern, ohne das Programm ändern zu müssen.
Dazu gönnt man dann der Klasse entsprechende Attribute, statt auf globale Konstanten zuzugreifen.