Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record in Record? (https://www.delphipraxis.net/47343-record-record.html)

hansklok 9. Jun 2005 17:48


Record in Record?
 
Hallo,

ihr kennt das sicherlich, ihr habt ein Image und macht folgendes:

Delphi-Quellcode:
Image1.Canvas...
Nun hat ja das Canvas wieder eigene Eigenschaften, das heißt, dass das Canvas ein Record im Image sein muss.
Ich möchte nun auch ein Record erstellen, z.B. so:

Delphi-Quellcode:
TDVD = record
Kapitel = record
Modus: Integer;
Count: Integer;
end;
DiscName: String;
end;
Ist dies eigentlich rein Programmiertechnisch möglich, ich habe zur Zeit mein Delphi nicht und möchte aber den Algorithmus wenigstens schon schreiben!

Danke

Robert_G 9. Jun 2005 17:54

Re: Record in Record?
 
Zitat:

Zitat von hansklok
Delphi-Quellcode:
Image1.Canvas...
Nun hat ja das Canvas wieder eigene Eigenschaften, das heißt, dass das Canvas ein Record im Image sein muss.

:shock: Oh Gott... nein!
Es ist eine Property vom Typ einer Klasse in einer Klasse. Wie kommst du auf die Idee es könnte ein record sein? :gruebel:

Phoenix 9. Jun 2005 17:55

Re: Record in Record?
 
Delphi-Quellcode:
RKapitel = record
   Modus: Integer;
   Count: Integer;
end;

TDVD = record
   Kapitel: RKapitel;
   DiscName: String;
end;
Das tut auf jeden Fall. Ob's direkt inline geht kann ich Dir spontan nicht sagen.

hansklok 9. Jun 2005 17:56

Re: Record in Record?
 
Danke Phoenix,
gerade eben kam mir auch dieser Gedankenblitz! Werde es auch so machen!

Tschau

Speedmaster 9. Jun 2005 18:30

Re: Record in Record?
 
Wieso, es geht auch anderst:
Delphi-Quellcode:
TMeinRecord = record
  NochnRecord: record

  end;
end;

alzaimar 9. Jun 2005 18:32

Re: Record in Record?
 
Is doch hässlich.

Robert_G 9. Jun 2005 18:33

Re: Record in Record?
 
Zitat:

Zitat von alzaimar
Is doch hässlich.

Wenigstens einer mit Sinn für Ästhetik. :?

Speedmaster 9. Jun 2005 18:43

Re: Record in Record?
 
Zitat:

Zitat von alzaimar
Is doch hässlich.

Naja, ist Geschmackssache, ich finde das sehr nützlich wenn ich diesen "unterrecord" nicht nochmal an anderer Stelle verwenden will!

alzaimar 9. Jun 2005 18:53

Re: Record in Record?
 
Tss.Tsss.Tss. Las uns nich drüber streiten: Hässlich und Nützlich. :cheers:

r2c2 9. Jun 2005 19:48

Re: Record in Record?
 
Ob schön oder nicht, ich würde trotzdem mal vorschlagen mal anzudenken, ob ne Klsse nicht sinnvoller wäre. Ich kenn zwar dein konkretes Problem nicht, aber ich merk selbst gerade, dass OOP eigentlich ganz praktisch is. :-D

mfg

Christian

Speedmaster 9. Jun 2005 19:55

Re: Record in Record?
 
Nur weil man Records verwendet heisst es nicht das man nicht OOP Programmiert( Besonderst seit .net nicht ).
Aber dazu gab es einen Riesen Thread, also such mal im Forum!

P.s.: Records sind IMHO zur Strukturierung des Programms da!

r2c2 9. Jun 2005 20:05

Re: Record in Record?
 
Zitat:

Zitat von Speedmaster
Nur weil man Records verwendet heisst es nicht das man nicht OOP Programmiert( Besonderst seit .net nicht ).
Aber dazu gab es einen Riesen Thread, also such mal im Forum!

P.s.: Records sind IMHO zur Strukturierung des Programms da!

Klar, ich dachte nur, weil der Image.Canvas angesprochen hat...
Und das sind definitiv Klassen!

Robert_G 9. Jun 2005 20:11

Re: Record in Record?
 
Zitat:

Zitat von Speedmaster
P.s.: Records sind IMHO zur Strukturierung des Programms da!

Kannst du dazu ein konkretes Beispiel geben?
Mir fällt da gerade absolut nix ein, was mit Reference types (Klassen/Interfaces) nicht flexibler, einfacher und eleganter wäre... :gruebel:
Würde mich echt interessieren.

Speedmaster 9. Jun 2005 20:22

Re: Record in Record?
 
Delphi-Quellcode:
TVertex = Record
  Points: array[0..2] of record
    x,y,z: double;
  end;
  sPoints: array[0..2] of record
    x,y: single;
  end;
end;
Warum sollte ich das in Klassen stecken??

r2c2 9. Jun 2005 20:23

Re: Record in Record?
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von Speedmaster
P.s.: Records sind IMHO zur Strukturierung des Programms da!

Kannst du dazu ein konkretes Beispiel geben?
Mir fällt da gerade absolut nix ein, was mit Reference types (Klassen/Interfaces) nicht flexibler, einfacher und eleganter wäre... :gruebel:
Würde mich echt interessieren.

Man kann in ner Klasse seine Daten durch Records strukturieren. Nur um die Daten zusammenzufassen, braucht man nicht gleich ne neue Klasse. :wink:

mfg

Christian

Speedmaster 9. Jun 2005 20:26

Re: Record in Record?
 
Füge noch hinzu:

Ausserdem muss man diese Daten dann auch noch Initialisieren, das wäre unnötige Arbeit!

Dax 9. Jun 2005 20:28

Re: Record in Record?
 
Wenn du statt records Klassen nimmst, musst du deine Felder initialisieren? :shock: Das wär das erste was ich höre. Ein simples .Create() reicht.. Von Initialisieren seh ich da nix :gruebel:

Speedmaster 9. Jun 2005 20:38

Re: Record in Record?
 
Zitat:

Zitat von Dax
Wenn du statt records Klassen nimmst, musst du deine Felder initialisieren? :shock: Das wär das erste was ich höre. Ein simples .Create() reicht.. Von Initialisieren seh ich da nix :gruebel:

Mit Initalisieren meine ich .create, ist das irgendwie falsch? Vielleicht habe ich das ja falsch gelernt! :oops:

Dax 9. Jun 2005 20:39

Re: Record in Record?
 
.Create ist instanziieren, Speedy ;) Initialisieren wäre sowas wie
Delphi-Quellcode:
Self.x := 0;
Self.y := 0;
Self.z := 0;
....

Robert_G 9. Jun 2005 20:52

Re: Record in Record?
 
Das hier war wohl etwas großzügig ausgeholt...
Zitat:

Zitat von Speedmaster
P.s.: Records sind IMHO zur Strukturierung des Programms da!

Denn ich sehe hiert nix, was ein Programm strukturieren kann.
Zitat:

Zitat von Speedmaster
Delphi-Quellcode:
TVertex = Record
  Points: array[0..2] of record
    x,y,z: double;
  end;
  sPoints: array[0..2] of record
    x,y: single;
  end;
end;
Warum sollte ich das in Klassen stecken??

Ich sehe da keinerlei Strukturierung, keinerlei Hierarchie.... Wie willst du denn Zugriffe auf einzelne Koordinaten generalisieren?
Das da würde für alles eine eigene Funktion benötigen. Jeweils ein für 2d und eine für 2d) benötigen
Außerdem müsstest du ihnen ständig deinen Record als Parameter übergeben.
Eine Klasse könnte Methoden anbieten, du könntest einen 2-dimensionalen Punkt ableiten und eine weitere Dimension hinzufügen, ...
Sorry, aber ich hoffte eigentlich gerade ein Beispiel zu bekommen, das mir zeigt wo Records eine bessere Struktur ermöglichen.
Ich sehe absolut nichts was dadurch vereinfacht werden könnte... :gruebel:

Interessant wird jetzt ein anderer Aspekt...
Um zu verhindern, dass das Ding da oben ständig kopiert wird müsstest du einen PVertex verwenden.
Der wiederum braucht einen TVertex auf den er zeigen kann. Genau da denke ich mir doch, dass ein Constructor oder eine Factory so schön einfach sind. :zwinker:

Speedmaster 9. Jun 2005 21:25

Re: Record in Record?
 
Es Spricht nichts dagegen den record in eine Klasse zu packen und ihn mit einer Funktion der Klasse aufzurufen, aber ich erkenne das ich dich Klassenfanatiker nicht überzeugen kann.

P.s.: Mein Vater steht hinter mir und schüttelt den Kopf über dich( Programmiert 25 Jahre )

Phistev 9. Jun 2005 21:34

Re: Record in Record?
 
Zitat:

Zitat von Robert_G
Interessant wird jetzt ein anderer Aspekt...
Um zu verhindern, dass das Ding da oben ständig kopiert wird müsstest du einen PVertex verwenden.
Der wiederum braucht einen TVertex auf den er zeigen kann. Genau da denke ich mir doch, dass ein Constructor oder eine Factory so schön einfach sind. :zwinker:

Delphi-Quellcode:
procedure TueEtwas(var rec: TVertex); //bzw.
procedure TueEtwas(const rec: TVertex);
Da wird AFAIR keine Kopie angelegt. Wieso muss es immer sofort ein Zeiger sein? :roll: Ich persönlich verwende Records nur, wenn ich etwas abspeichern möchte, welches ich mir aus anderen Variablen zusammenbastle und danach wieder freigebe, und mir die Zeit fehlt, entsprechende Methoden zu schreiben. Highscores z.B. lassen sich gut als Record speichern.

alzaimar 10. Jun 2005 08:35

Re: Record in Record?
 
Ich versteh Dich ja, aber eigentlich hat man doch immer irgendwelche Funktionen, die mit den Daten des/der Records arbeiten. Sonst bräuchte man ja keine Records. Wenn man es richtig machen will, sollte man immer eine Klasse nehmen, aber wer jat schon immer die Zeit, Alles richtig zu machen. Wenn ich mal eben was runterfrickeln muss, dann rutscht mir auch manchmal ein 'record' in den Code, was solls.

Aber rein softwaretechnisch spricht nichts für die Verwendung von Records.

barf00s 10. Jun 2005 08:50

Re: Record in Record?
 
da will ich nu auch mal meinen senf dazugeben :)

es gibt nich nur records und classes, sondern auch noch die guten alten objects (wenn hier wer mit TP erfahrung dabei iss, der wird sie auch noch kennen)
DIESE objects benötigen auch keine "initialisierung" wie klassen :) sie sind ja schon quasi instanziiert

:)
Delphi-Quellcode:
type
  TFoo = object
    Blah: string;
    Fasl: integer;
  end;

var
  xFoo: TFoo;

begin
  xFoo.Blah := 'barf00s';
  xFoo.Fasl := 1337;
end;

marabu 10. Jun 2005 09:21

Re: Record in Record?
 
Zitat:

Zitat von Borland
(D7) Objekttypen werden nur aus Gründen der Abwärtskompatibilität unterstützt. Ihre Verwendung ist in neuen Anwendungen nicht zu empfehlen.

Freundliche Grüße vom marabu

alcaeus 10. Jun 2005 09:30

Re: Record in Record?
 
Muesst ihr euch denn immer den OOP-Fanatismus bzw. die Abneigung zu OOP um die Ohren hauen? Lasst doch jeden alles so programmieren, wie er es will. Das Problem wurde geklaert, und es wurde vorgeschlagen, es evtl. mit einer Klasse zu realisieren. Das ist kein Grund, sich wiedermal den Sinn bzw. Unsinn von Klassen und Records um die Ohren zu hauen :roll:

Also, kommt bitte wieder zum Thema zurueck. Falls jemand noch einen sinnvollen Tipp hat, kann er ihn gerne abgeben, aber bitte seht die Diskussion zu Records, Klassen, und objects als beendet an. Diese koennt ihr ja in einem neuen Thread austragen.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz