Don' t repeat yourself

"Don' t repeat yourself" (DRY) besagt, dass man möglichst so programmieren soll, dass man ohne Wiederholungen von gleichem oder ähnlichem Code auskommt. Dies schafft zum Einen mehr Übersicht, zum Anderen wird die Wartung erheblich vereinfacht. Auch hierzu wieder ein paar Beispiele: 3 Labels sollen bei einem Klick ihre jeweilige Beschriftung in einer Message ausgeben (das ist zugegebenermaßen ziemlich sinnfrei, soll aber in diesem Zusammenhang nicht stören).
Beispielcode 1:
procedure TFormTest.Label1Click(Sender: TObject);
begin
  ShowMessage(Label1.Caption);
end;

procedure TFormTest.Label2Click(Sender: TObject);
begin
  ShowMessage(Label2.Caption);
end;

procedure TFormTest.Label3Click(Sender: TObject);
begin
  ShowMessage(Label3.Caption);
end;
Beispielcode 2:
procedure TFormTest.DoOnLabelClick(Sender: TObject);
begin
  if Sender is TLabel then
    ShowMessage(TLabel(Sender).Caption);
end;
Wenn Sie den 2. Code im Objektinspektor von Delphi allen 3 Labels zuweisen, erhalten Sie das selbe Ergebnis wie in Beispiel 1, haben den Code aber an zentraler Stelle. Das bedeutet, wenn Sie Änderungen oder Erweiterungen implementieren möchten, müssen Sie das nur an dieser zentralen Stelle tun und nicht zig mal über den gesamten Code verteilt.
Was oftmals auch vergessen/übersehen wird: zum DRY-Prinzip gehört auch die sinnvolle Verwendung von Konstanten. Vergleichen Sie einmal selbst:
Beispielcode 1:
procedure TFormTest.ButtonIrgendwasClick(Sender: TObject);
var
  Stringlist: TStringlist;
begin
  Stringlist := TStringlist.Create;
  try
    Stringlist.LoadFromFile('C:\Test\Test.txt');
    DoSomething(Stringlist);
    Stringlist.SaveToFile('C:\Test\Test.txt');
  finally
    Stringlist.Free;
  end;
end;
Beispielcode 2:
procedure TFormTest.ButtonIrgendwasClick(Sender: TObject);
const
  MYTEXTFILE = 'C:\Test\Test.txt';
var
  Stringlist: TStringlist;
begin
  Stringlist := TStringlist.Create;
  try
    Stringlist.LoadFromFile(MYTEXTFILE);
    DoSomething(Stringlist);
    Stringlist.SaveToFile(MYTEXTFILE);
  finally
    Stringlist.Free;
  end;
end;
(Lassen wir den Sinn oder besser: Unsinn von hartkodierten Pfaden einmal außer Acht.) Wenn Sie lieber wie in Beispiel 1 coden, dann sagen Sie mir doch bitte, wie Sie sicherstellen möchten, dass Sie sich nicht an irgendeiner Stelle im Code einmal vertippen und somit in eine andere ganz Datei speichern möchten als die, aus der Sie den Listeninhalt ursprünglich geladen haben. Die 2. Variante hat den Vorteil, dass, wenn Sie sich vertippen, der Pfad zumindest durchgängig auf die falsche Stelle im Dateisystem zeigt.