Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 14:03
Das ist ja mal ein tolles Beispiel, wie man nicht programmieren sollte.
Die Methode ist riesig und hat jede Menge Wiederholungen.
Ausserdem steckt noch auskommentierter Code als Störfeuer drin.

Ok, genug gelästert, hier der Weg zur Besserung.
Ich würde hier ein Bottom-Up-Design vorschlagen; also unten mit den kleinen Dingen beginnen und verbessern.

Ich greife mal diese Zeile raus, die vier Mal vorkommt:
Delphi-Quellcode:
if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
begin
Daraus lässt sich eine Funktion erstellen:
Delphi-Quellcode:
function CharIstSatzzeichen(c:char):Boolean;
begin
  result := (c='.') or (c=',') or (c='!') or (c='?') or (c=':') or (c=';');
end;
Mit dem In-Operator lässt sich das noch etwas kompakter schreiben:
Delphi-Quellcode:
function CharIstSatzzeichen(c:AnsiChar):Boolean;
begin
  result := c in ['.',',','!','?',':',';'];
end;
Im nächsten Schritt wird diese Funktion dann verwendet.

Aber damit noch nicht genug. Wir betrachten folgenden Code:
Delphi-Quellcode:
prgrammdb.DikNeuSatzEintrag.Last;
prgrammdb.DikNeuSatzEintrag.Insert;
prgrammdb.DikNeuSatzEintragDiktatID.Value:=prgrammdb.dikNeuEintragID.Value;
prgrammdb.DikNeuSatzEintragWort.Value:=prgrammdb.silbenSilbe.Value;
prgrammdb.DikNeuSatzEintragSatzID.Value:=j;
prgrammdb.DikNeuSatzEintragWortID.Value:=seObjekt1.wortID;
prgrammdb.DikNeuSatzEintragSilbenID.Value:=x;
prgrammdb.DikNeuSatzEintrag.Post;
Dieser Code muss "verschwinden", d.h. er muss in eine Methode wandern:
Delphi-Quellcode:
// Datensatz an Diktionary anhängen
procedure TdiktatNeuDLG.AddDikRecord(DikatID,Word,SatzID,WordID,SilbenID: ???);
Den Datentyp für die Parameter habe ich weggelassen; die kennst du selbst am Besten.
Eigentlich ist der Code noch an der falschen Stelle.
Er gehört zum Datenmodul (oder Formular) Tprgrammdb.
Andreas
  Mit Zitat antworten Zitat