AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

dynmisches array statt TArray<T>?

Ein Thema von freimatz · begonnen am 22. Nov 2022 · letzter Beitrag vom 22. Nov 2022
Antwort Antwort
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
493 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: dynmisches array statt TArray<T>?

  Alt 22. Nov 2022, 10:45
Und das ist ein Nachteil?
Das kommt darauf an, was du als "Nachteil" siehst.

Delphi-Quellcode:
type
  TArray1 = array of String;
  TArray2, TArray3 = array of String;
  TArray4 = TArray<String>;
  TArray5 = TArray<String>;
begin
  TypeInfo(TArray1) = TypeInfo(TArray2) // Ergibt False
  TypeInfo(TArray2) = TypeInfo(TArray3) // Ergibt True
  TypeInfo(TArray4 {oder: 5}) = TypeInfo(TArray1 {oder: 2 oder: 3}) // Ergibt False
  TypeInfo(TArray4) = TypeInfo(TArray5) // Ergibt Tue
end.
Meiner Meinung nach sollte man eigentlich in modernen Anwendungen immer TArray<T> benutzen, außer es gibt einen wirklich guten Grund es nicht zu tun.
Der "einzige" Grund meiner Meinung nach sind hier offene Array-Parameter, denn die können halt auch staische Arrays entgegennehmen, was ein dynamischer Array-Parameter nicht kann.

Delphi-Quellcode:
//Grundsättzlich gilt, dass...
var Strs: TArray<String>;
// ...immer gleichbedeutend mit...
type TStrs = TArray<String>;
var Strs: TStrs;
//...und mit...
type TStrs = array of String;
var Strs: TStrs;
// ...ist, ohne Ausnahmen.
// Voraussetzung hierfür ist, dass alle Variablen immer den gleichen Typen benutzen.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: dynmisches array statt TArray<T>?

  Alt 22. Nov 2022, 13:19
Manchmal will man absichtlich unterschiedliche, nicht zuweisungskompatible Typen haben,
z.B. wenn du eine überladene Methode für zwei solcher Typen hast.


Aber ansonsten ist es super, weil du überall ein TArray<Byte> oder TArray<string> schreiben kannst,
und dieser Typ auch mit Typen und Methoden in anderen Units (vorallem Fremdkomponenten) kompatibel ist.

Beispiel TBytes von Delphi vs. dem absolut inkompatiblen Bytes-Array von Indy.
Oder lange Zeit das TStringDynArray von Delphi, was inzwischen als TArray<string> deklariert ist.

Für String und Byte hat Delphi schon ewig vordefinierte Array-Typen, welche aber nicht von allen Entwicklern genutzt wurden (z.B. Indy) und man dann Probleme hatte, sowas zwischen zwei Komponenten/Codes durchzureichen.
Aber für viele Typen gab es auch keine Vordefinierten, womit Jeder seinen eigenen Typen deklarieren musste, welche ohne TArray<T> nicht miteinander arbeiten will.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Nov 2022 um 13:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 00:14 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