Home » Tutorials » Sonstiges » Refactoring oder Wie warte ich meinen Code?

Refactoring oder Wie warte ich meinen Code?

Ressourcen-Strings extrahieren

Nun möchten wir uns anschauen, wie wir Ressourcen-Strings extrahieren können. Dazu erst einmal: Wofür ist das gut? Und was ist das überhaupt?
Nehmen wir doch einmal an, wir verwenden irgendwo im Programm irgendwelche Zeichenstrings, sei es für Überschriften, Aufforderungen oder Infos an den Benutzer. Wenn wir dann aber etwas daran ändern wollen, weil vielleicht ein Fehler vorliegt oder unsere alte Fehlermeldung uns einfach nicht mehr so aussagekräftig erscheint, dann müssen wir uns durch den gesamten Quellcode wuseln und hoffen, dass wir keine Stelle auslassen, wo der Fehler zu korrigieren ist. Falls wir überhaupt auf Anhieb den entscheidenden String finden.
Um das zu vermeiden, gibt es die sogenannten Ressourcen-Strings. Das heißt, wir haben unsere Strings an einer konkreten Stelle im Programm, wo wir sie gesammelt nach Belieben verändern können. Das ist auch dann nützlich, wenn vielleicht wir oder jemand anderes später unser Programm übersetzen soll. Dann braucht er lediglich an einer Stelle im Quellcode die Strings ändern, statt dass er erst das halbe Programm kennen lernen muss.
Wir können uns Ressourcen-Strings übrigens als eine Art String-Konstanten vorstellen. Sagen wir, wir haben den folgenden Codeschnippsel gegeben:

procedure TFormular_Main.FormCreate(Sender: TObject);
begin
  Self.Caption := 'Hallo, Welt';
end;

Nun möchten wir unseren „Hallo-Welt“-String in einen Ressourcen-String umwandeln. Wir markieren ihn, rechtsklicken und wählen „Refactoring->Ressourcenstring <String> extrahieren“. Daraufhin gibt es wieder einen unserer Dialoge.

Unter „Name“ tragen wir unseren gewünschten Namen für den Ressourcenstring ein und klicken auf OK. Daraufhin trägt Delphi diesen im Implementationbereich ein.

implementation
  resourcestring
    StrHalloWelt = 'Hallo, Welt';
  {$R *.dfm}

  procedure TFormular_Main.FormCreate(Sender: TObject);
  begin
    Self.Caption := StrHalloWelt;
  end;

Wenn wir wollen, können wir ihn danach bequem ändern, egal wie oft und an welcher Stelle in unserem Quellcode wir ihn benutzen.
Ein paar Einschränkungen hat dieses System aber schon. Stringkonstanten können nicht extrahiert werden, Konstanten in Parametern können auch nicht extrahiert werden, und bereits vorhandene Ressourcenstrings lassen sich nicht in einen erneuten Ressourcenstring extrahieren.