AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantes Array of Record deklarieren

Ein Thema von dummzeuch · begonnen am 3. Jul 2025 · letzter Beitrag vom 10. Jul 2025
 
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#13

AW: Konstantes Array of Record deklarieren

  Alt 10. Jul 2025, 12:24
Hallo,
ich verstehe noch nicht, wieso das überhaupt gehen sollte. Für mich ist "konstant" und "dynamisch" ein Widerspruch.
Wenn es eine Konstante sein soll, dann kann man doch auch ein festes Arry machen - oder nicht?
Das Gegenteil von konstant ist variabel.
Das Gegenteil von statisch ist dynamisch.

Zumindest in dieser Konstellation, und es ist wichtig, dass du genau darauf achtest. Es gibt folgende Konstellationen:
  • statische Array-Konstanten: const A: array [0..1] of Byte = (-128, 127)
  • dynamische Array-Konstanten: const A: array of Byte = [-128, 127]
  • statische Array-Variablen: var A: array [0..1] of Byte
  • dynamische Array-Variablen: var A: array of Byte

Der einzige Unterschied für den Programmierer ist, dass du bei dynamischen Arrays keine Länge angeben brauchst, sondern diese automatisch gesetzt wird (damals brauchte man SetLength , das geht heute aber auch ohne):
Delphi-Quellcode:
var
  A: array of Byte;
begin
  // früher:
  // SetLength(A, 2);
  // A[0] := -128;
  // A[1] := 127;
  // oder, falls man einen Typen hatte:
  // A := TBytes.Create(-128, 127);
  // Braucht man heute alles nicht mehr, einfach:
  A := [-128, 127];
end;
Genau das gleiche trifft auch auf die Konstanten zu: Hier ist der einzige Unterschied, dass du keine explizite Längenangabe in der Deklaration mehr brauchst.*

*) Und noch ein paar Unterschiede in der Speicherverwaltung, aber die sind jetzt mal egal.

Hinzu kommt noch ein Sonderfall: Dynamische Array-Inline-Konstanten. Darauf wollte ich jetzt eigentlich nicht eingehen, aber weil es anscheinend doch noch zu einer belebten Diskussion gekommen ist, hier mal ein Lösungsansatz:
Delphi-Quellcode:
type
  TKameraTypRec = record
    Name: string;
    Breite: Integer;
    Hoehe: Integer;
    PixelSizeX: Extended;
    PixelSizeY: Extended;
    // Implementierung der Factory-Methode dürfte selbsterklärend sein:
    class function Create(const AName: String; const ABreite, AHoehe: Integer; const APixelsSizeX, APixelsSizeY: Extended): TKameraTypRec; static;
    // Du kannst natürlich stattdessen auch eine globale Routine nehmen, ist ja das selbe wie eine statische Klassenfunktion
  end;

begin
  const CAM_TYPES: TKameraTypArr {Typen könntest du dank Inferenz sogar weglassen, lol} = [
    TKameraTypRec.Create('GT1920', 1920, 1080, 0.00000586, 0.00000586)
  ];
  // ...
end.
So geht das theoretisch. Ob es jetzt geiler ist als da eben eine Länge vor zu schreiben muss jeder für sich selbst entscheiden.
Dennis
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz