Code besser lesbar machen durch Konstanten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Code besser lesbar machen durch Konstanten

Beitrag von Eb »

Hallo,

Ich würde gerne meinen Code dadurch besser lesbar machen, indem ich eine integer variable durch konstante
Strings ersetze.
Ich habe zwei Varianten zur Auswahl, beide funktionieren aber nicht vollständig.

Originalcode (es geht um die variable modus):

Code: Alles auswählen

var modus : integer; // 1 : Rennen, 2: Verfolgung
 
procedure TForm1.Button2Click(Sender: TObject);
var   parameter : array[1..10] of integer;
begin
  modus := 1;
 
  case modus of
    1    : debugln('Rennen');
    2    : debugln('Verfolgung');
  end;
 
  parameter[1] := 4;
 
end;
Variante 1 mit Konstanten. Hier funktioniert das 'case' nicht:

Code: Alles auswählen

const
 RENNEN  : integer = 1;
 VERFOLGUNG :integer = 2;
 
procedure TForm1.Button2Click(Sender: TObject);
var modus : integer;
    parameter : array[1..10] of integer;
begin
  modus := RENNEN;
 
  case modus of
    RENNEN     : debugln('Rennen');
    VERFOLGUNG : debugln('Verfolgung');
  end;
 
   parameter[RENNEN] := 4;
 
end;
Variante 2 mit typisierten Konstanten. Hier funktioniert das array nicht:

Code: Alles auswählen

Type
 TModus = ( RENNEN,VERFOLGUNG);
 
procedure TForm1.Button2Click(Sender: TObject);
var modus : TModus;
    parameter : array[1..10] of integer;
begin
  modus := RENNEN;
 
  case modus of
    RENNEN     : debugln('Rennen');
    VERFOLGUNG : debugln('Verfolgung');
  end;
 
  parameter[RENNEN] := 4;
 
end;

Habt ihr eine Idee, wie ich es anstellen kann, dass 'case' und 'parameter[...]' mit Strings funktionieren ?

Eb

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Code besser lesbar machen durch Konstanten

Beitrag von theo »

Code: Alles auswählen

procedure TForm1.Button1Click(Sender:TObject);
Type
 TModus = ( RENNEN,VERFOLGUNG);
var modus : TModus;
    parameter : array[RENNEN..VERFOLGUNG] of integer;
begin
  modus := VERFOLGUNG;
 
  case modus of
    RENNEN     : writeln('Rennen');
    VERFOLGUNG : writeln('Verfolgung');
  end;
  parameter[RENNEN] := 4;
end;
 
Oder
 
procedure TForm1.Button1Click(Sender:TObject);
Type
 TModus = ( RENNEN,VERFOLGUNG);
var modus : TModus;
    parameter : array[0..1] of integer;
begin
  modus := RENNEN;
 
  case modus of
    RENNEN     : writeln('Rennen');
    VERFOLGUNG : writeln('Verfolgung');
  end;
 
  parameter[Ord(RENNEN)] := 4;
 
end;

Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Code besser lesbar machen durch Konstanten

Beitrag von Eb »

funktioniert perfekt !

Vielen Dank,
Eb

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Code besser lesbar machen durch Konstanten

Beitrag von Socke »

Eb hat geschrieben:Habt ihr eine Idee, wie ich es anstellen kann, dass 'case' und 'parameter[...]' mit Strings funktionieren ?
Für ersteres brauchst du glaub ich nur ne neuere FPC-Version (trunk/2.5.1) oder du nutzt die Funktion StringCase() aus der Unit LCLProc.
Letzteres wäre wohl ein assoziatives Array, welches vom FPC nicht nativ unterstützt wird (kann aber mit Hash-Listen gelöst werden).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Korkenkrone
Beiträge: 33
Registriert: Sa 18. Sep 2010, 20:33
OS, Lazarus, FPC: OpenSUSE 11.3 (L 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: x86-64

Re: Code besser lesbar machen durch Konstanten

Beitrag von Korkenkrone »

Schön ist auch:

Code: Alles auswählen

type
  TModus = ( Rennen, Verfolgung );
  TModusString = Array [TModus] of String;
const
  ModusString : TModusString = ( 'Rennen', 'Verfolgung' );
var
  Modus : TModus;
  ...
begin
  Modus := Rennen;
  WriteLn(ModusString[Modus]);
  ...
Vor Allem ist es dann praktisch, wenn noch weitere Modi hinzu kommen, oder du eine Stringdarstellung der Modi öfter brauchst.

Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Code besser lesbar machen durch Konstanten

Beitrag von Eb »

in der Tat, die Erweiterung mit dem String-Array ist wirklich praktisch.
Die baue ich in theos variante 1 mit ein:

Code: Alles auswählen

type
  TModus       = ( Rennen,Zeitrennen, Verfolgung );
  TModusString = Array [TModus] of String;
const
  ModusString : TModusString = ( 'Rennen', 'Zeitrennen', 'Verfolgung' );
Ich muss tatsächlich gerade einen neuen modus hinzufügen und ausserdem die Bezeichnung an verschiedenen Stellen ausgeben.
Hoffentlich sind noch mehr unserer neuen Mitglieder hellseherisch begabt ...

Antworten