Variablen einen Wert in der Deklaration zuweisen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ps4711
Beiträge: 11
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Linux xfce fpc 2.x
CPU-Target: 64Bit

Variablen einen Wert in der Deklaration zuweisen

Beitrag von ps4711 »

Hallo alle miteinander,

ist es möglich in der Deklaration einer Variablen dieser direkt einen initialen Wert zuzuweisen.

Bsp.:

Code: Alles auswählen

var
  z : integer = 0;

wp_xyz
Beiträge: 4320
Registriert: Fr 8. Apr 2011, 09:01

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von wp_xyz »

Warum probierst du's nicht einfach aus? Wenn's nicht erlaubt ist, meckert schon der Compiler. Und wenn er nicht meckert, könnte noch der Wert falsch sein. Das kann man einfach ausprobieren.

Code: Alles auswählen

program Project1;
var
  z: Integer = 10;
begin
  WriteLn(z);
  ReadLn;
end.

Benutzeravatar
Winni
Beiträge: 1320
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von Winni »

Hi!

Erstens geb ich wp_xyz recht: Probieren , probieren ....

Der Compiler gibt Dir Zeile und Spalte des Fehlers an. Meistens stimmt das sogar .
Manchmal auch nicht, z.B. wenn Du das Semikolon in der Zeile davor vergessen hast.

Außerdem gehen sogar komplexere Strukture und die Initialisierung in der Deklaration:

Code: Alles auswählen

var ar : array[1..3] of string = ('Moin','Mahlzeit','Nabend');
Winni´

ps4711
Beiträge: 11
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Linux xfce fpc 2.x
CPU-Target: 64Bit

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von ps4711 »

OK, vielen Dank für eure Antworten.

Entschuldigt bitte das war mein Fehler ... ich hatte es getestet aber dann verkürzt bzw. abgeändert hier ins Forum gestellt. Und siehe da ausgerechnet das funktioniert.

Nun nicht allzu verkürzt:

Code: Alles auswählen

TForm1 = class(TForm)
    btnStart: TButton;
    procedure btnStartClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    x : integer = 0;
 
  public

  end;       
  
Fehlercode:

Code: Alles auswählen

main.pas(46,17) Fatal: Syntax error, ";" expected but "=" found

Benutzeravatar
Winni
Beiträge: 1320
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von Winni »

Hi!

Ja Klassen sind nicht Pascal. Sondern Object Pascal. Da gelten andere Regeln.
Aber Du kannst so etwas schnitzen:

Code: Alles auswählen

private
  Something: integer;
  const
  ThingSome = 5; 
  ...
          
Und dann musst Du bei create die beiden verbinden.

Für Properties hingegen gibt es die default Werte. Die müssen aber auch initialisiert werden.


Winni

wp_xyz
Beiträge: 4320
Registriert: Fr 8. Apr 2011, 09:01

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von wp_xyz »

ps4711 hat geschrieben:
Mi 8. Dez 2021, 20:58

Code: Alles auswählen

TForm1 = class(TForm)
  private
    x : integer = 0;
  end;       
  
Fehlercode:

Code: Alles auswählen

main.pas(46,17) Fatal: Syntax error, ";" expected but "=" found
Während man globale und (bei FPC, nicht aber bei Delphi) lokale Variablen schon bei der Deklaration initialisieren kann, geht das bei den Feldern einer Klasse nicht. Aber um das obige x auf Null zu setzen, musst du eigentlich auch gar nichts tun, denn der Constructor der Klasse setzt alle Felder automatisch auf 0 bzw. den entsprechenden Wert anderer Typen (bei boolean false, bei String auf '', bei Pointern auf nil, bei Aufzählungen auf das erste Element, ...). Nur wenn du einen davon abweichenden Wert brauchst musst du das explizit im Constructor der Klasse (oder bei TForm auch im OnCreate Ereignis) hinschreiben.

ps4711
Beiträge: 11
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Linux xfce fpc 2.x
CPU-Target: 64Bit

Re: Variablen einen Wert in der Deklaration zuweisen

Beitrag von ps4711 »

Vielen Dank euch beiden für die ausführlichen Antworten.
Das hilft mir weiter.

Antworten