AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Konstantes Array of Record deklarieren

Ein Thema von dummzeuch · begonnen am 3. Jul 2025 · letzter Beitrag vom 10. Jul 2025
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.501 Beiträge
 
Delphi 12 Athens
 
#11

AW: Konstantes Array of Record deklarieren

  Alt 10. Jul 2025, 11:58
Auch das Thema mehrere Entwickler und Mergen, spielt gern eine Rolle.

Zwei Kollegen fügen je eine "Zeile" / Eintrag hinzu, dann müssten sie ja, bei einem statischen Array die Größe definieren, was sich nach dem Merge aber wiederspricht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.051 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#12

AW: Konstantes Array of Record deklarieren

  Alt 10. Jul 2025, 12:02
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?
"Konstant" und "Dynamisch" sind hier wohl die falschen Worte - es geht eher darum, dass es kein "fixed-size" Array ist und somit auch potenziell zuweisungskompatibel zu einer array of T oder TArray<T> Variablen oder Parameter.

Die Technik hinter einem "konstanten dynamischen" Array ist dieselbe, wie bei einem konstanten String bzw Stringliteral - der Compiler legt dadurch, dass er -1 in das RefCount Feld schreibt, fest, dass es sich um eine "Konstante" handelt, von der in bestimmten Fällen eine Kopie gemacht werden muss.

So sollte es gehen
Nein, E2026 Constant expression expected
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (10. Jul 2025 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.729 Beiträge
 
Delphi 12 Athens
 
#14

AW: Konstantes Array of Record deklarieren

  Alt 10. Jul 2025, 13:32
Ich will ein dynamisches Array von Records als Konstante deklarieren.
Geht nicht, weil
Yo, den hatte ich ganz vergessen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:31 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