Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Record im Record
Grimsch - So 27.09.09 16:42
Titel: Record im Record
hi ich mal wieder^^
da meine bisherigen Errungenschaften an Wissen über Records bisher noch nicht ausreichen um für mein Projekt eine vernünftige Punktzahl zu bekommen habe ich mir gedacht dass ich versuche noch Tiefer in die Materie von Records eindringen muss. :)
Und da hab ich mir gedacht, dass es ja auch verschiedene Programme gibt in denen in einem Record weitere Records eingespeist sind und dass ich mich darüber erkundigen will. Allerdings habe ich bisher nichts konkretes an Erklärungen gefunden und mir ist der Sinn des Ganzen noch nicht ganz klar geworden.
Könntet ihr mir das vllt. erklären wozu man genau Records im Record braucht und vllt ein kleines Beispiel angeben, welches genau zeigt, dass bei diesem Programm ein Record im Record von Nöten ist und man das nicht so einfach ohne machen kann? Falls es sowas gibt^^
Möglichst ohne Arrays bitte :P
MfG
anbest - So 27.09.09 18:26
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TGeburtstag = record Tag: Integer; Monat: Integer; Jahr: Integer; end;
TMensch = record Vorname: string; Nachname: string; Geburtstag: TGeburtstag; end;
TTier = record Spitzname: string; Geburtstag: TGeburtstag; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var Mensch: TMensch; Tier: TTier; begin Mensch.Vorname := 'Hans'; Mensch.Nachname := 'Wurst'; Mensch.Geburtstag.Tag := 3; Mensch.Geburtstag.Monat := 5; Mensch.Geburtstag.Jahr := 1990;
ShowMessageFmt('%s %s geboren am %d.%d.%d', [Mensch.Vorname, Mensch.Nachname, Mensch.Geburtstag.Tag, Mensch.Geburtstag.Monat, Mensch.Geburtstag.Jahr]);
Tier.Spitzname := 'Bonny'; Tier.Geburtstag.Tag := 6; Tier.Geburtstag.Monat := 10; Tier.Geburtstag.Jahr := 1996; end; |
Ein Record im Record kann man benutzen wenn man
mehrere gleiche Variablen in
2 Verschiedenen Records braucht, wie jetzt z.B.
bei diesem Beispiel: "TMensch" und "TTier", haben beide ein Geburtstag, und deshalb hab ich jetzt einfach mal ein
extra Record für diesen Geburtstag erstellt.
F34r0fTh3D4rk - So 27.09.09 18:49
Oder wenn man ähnliche Attribute zweimal im selbem
record oder der selben Klasse braucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TDatum = record Tag, Monat, Jahr: integer; end;
TMensch = record Vorname, Nachname: string; Geburtstag, Hochzeitstag: TDatum; end; |
Grimsch - So 27.09.09 19:59
ok danke aber inwiefern ist das hilfreich? man könnte doch genausogut auch anstatt
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TDatum = record Tag, Monat, Jahr: integer; end;
TMensch = record Vorname, Nachname: string; Geburtstag, Hochzeitstag: TDatum; end; |
auch
Delphi-Quelltext
1: 2: 3: 4:
| type TMensch = record Vorname, Nachname, Tag, Monat, Jahr: string; end; |
schreiben oder nicht? nur wäre es im diesem Fall vllt. nicht ganz so übersichtlich als wenn man einen richtigen Pfad angeben kann mit geburtstag.tag usw. oder wie seht ihr das? ich muss das selbst ja irgendwie meinen klassenkameraden als Vortrag beibringen und denen vermitteln warum das alles so ist^^
FinnO - So 27.09.09 20:07
dann berechne mal lockerflockig den abstand zwischen Geburtstag und Hochzeitstag ohne Typumwandlung^^ da helfen integer schon enorm.
Grimsch - So 27.09.09 22:21
ja ok dann würde es halt so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| type TMensch = record Vorname, Nachname: string; Tag, Monat, Jahr: integer; end; |
aber das hilft mir noch immer nicht weiter da ich nun immernoch nich weiß ob es mit 2 records besser ist als alles in einen reinzustecken so wie ich es eben gemacht hab und warum? oder eben so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TDatum = record Tag, Monat, Jahr: integer; end;
TMensch = record Vorname, Nachname: string; Geburtstag, Hochzeitstag: TDatum; end; |
FinnO - So 27.09.09 22:24
du hast das Beispiel selbst aufgeschrieben... Wenn du den gleichen Datentyp mehrfach brauchst, sehen Records einfach besser aus und sind übersichtlicher.
Grimsch - So 27.09.09 22:38
ok danke also würde es wenn mich nun jemand fragen würde "Warum ein Record im Record wenn das auch mit nur einem Record gehen würde" wäre die Antwort im Grunde einfach nur "Damit der Record übersichtlicher ist und stylistisch besser aussieht" richtig? =)
FinnO - So 27.09.09 22:42
am besten wäre:
"weil es stilistisch besser und übersichtlicher ist, einzelne Bereiche in einzelne Typen auszulagern. Ein Mensch hat nicht die Eigenschaft Tag, dafür aber ein Datum, während ein Mensch die Eigenschaft Geburtsdatum hat."
F34r0fTh3D4rk - So 27.09.09 22:42
Grimsch hat folgendes geschrieben : |
ok danke aber inwiefern ist das hilfreich? man könnte doch genausogut auch anstatt
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TDatum = record Tag, Monat, Jahr: integer; end;
TMensch = record Vorname, Nachname: string; Geburtstag, Hochzeitstag: TDatum; end; |
auch
Delphi-Quelltext 1: 2: 3: 4:
| type TMensch = record Vorname, Nachname, Tag, Monat, Jahr: string; end; |
schreiben oder nicht? |
Das geht nur dann, wenn Geburtstag und Hochzeitstag auf den selben Tag fallen :mrgreen:
Wenn du es so machen möchtest, hieße es:
Delphi-Quelltext
1: 2: 3: 4:
| type TMensch = record Vorname, Nachname, Geburtstag_Tag, Geburtstag_Monat, Geburtstag_Jahr, Hochzeitstag_Tag, Hochzeitstag_Monat, Hochzeitstag_Jahr: string; end; |
und das ist dann schon sehr unübersichtlich ;)
mfg
Grimsch - Mo 28.09.09 12:27
ah ok alles klar vielen dank euch allen =)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!