Array der eigenen Klasse als Result oder Property

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Array der eigenen Klasse als Result oder Property

Beitragvon compmgmt » 20. Dez 2018, 20:39 Array der eigenen Klasse als Result oder Property

Hallo allerseits,
erstmal zur Theorie. Mir ist absolut bewusst dass man ein Array nicht als Result übergeben kann, einen Typ allerdings schon. Das folgende ist möglich:
Code: Alles auswählen
type
  TIntArray = array of Integer;
...
function a: TIntArray;

Jetzt zu meinem Problem: Ich habe eine Klasse, welche sich selbst enthalten kann und möchte dies als Funktionsergebnis angeben. Hier mal zur Veranschaulichung ein Beispiel:
Code: Alles auswählen
type
  TMyClass = class
    private
      FItems: array of TMyClass;
    public
      function GetItems(OtherInformations: String): array of TMyClass;
  end;

Ich habe schon folgende Ideen gehabt/folgendes probiert:
1. TObjectArray = array of TObject (bzw die Elternklasse, wenn es nicht direkt TObject ist) stattdessen zu nehmen, wobei ich diese Möglichkeit als nicht schön finde und ein rekursives Ausgeben der Items durch casten umständlich gemacht wird. Sollte es keine Lösung für dieses Problem geben werde ich es eben so machen.
2. TArray spezialisieren, wobei das nicht funktioniert da ich ja auch erst einen Typ erstellen muss.

Habt ihr irgendwelche Ideen?
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 344
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon Warf » 20. Dez 2018, 22:16 Re: Array der eigenen Klasse als Result oder Property

Was du suchst sind foreword deklarationen
Code: Alles auswählen
TMyClass = class; // foreword dekl
 
TArrayType = Array  of TMyClass; // benutze foreword dekl
 
TMyClass =class // richtige Definition
//...
Arr: TArrayType;
End;


Ps: bin am Handy also nicht über Tippfehler wundern
Warf
 
Beiträge: 1067
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon compmgmt » 21. Dez 2018, 05:53 Re: Array der eigenen Klasse als Result oder Property

Danke Warf, an forward Deklarationen hab ich gar nicht gedacht. Hab sie bisher noch nie benötigt.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 344
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon Socke » 22. Dez 2018, 11:48 Re: Array der eigenen Klasse als Result oder Property

Du kannst auch in Klassen Typen definieren:
Code: Alles auswählen
type
TMyClass = class(TObject)
public type
  TMyClassArray = array of TMyClass;
public
  function GetResult: TMyClass.TMyClassArray;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2574
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon braunbär » 22. Dez 2018, 23:11 Re: Array der eigenen Klasse als Result oder Property

Hat den Nachteil, dass du solche Typen außerhalb von Methoden dieser Klasse immer als Klassenname.Typbezeichnung ansprechen musst.

Innerhalb der Klasse aber nicht, du kannst also schon schreiben

Code: Alles auswählen
 
type
TMyClass = class(TObject)
public type
  TMyClassArray = array of TMyClass;
public
  function GetResult: TMyClassArray;
end;
 
 
braunbär
 
Beiträge: 286
Registriert: 8. Jun 2017, 17:21

Beitragvon wp_xyz » 22. Dez 2018, 23:39 Re: Array der eigenen Klasse als Result oder Property

Socke hat geschrieben:Du kannst auch in Klassen Typen definieren

Schade, dass die klare Struktur der Sprache Pascal durch solche Modeerscheinungen immer mehr verwässert wird.
wp_xyz
 
Beiträge: 2800
Registriert: 8. Apr 2011, 08:01

Beitragvon Warf » 23. Dez 2018, 00:07 Re: Array der eigenen Klasse als Result oder Property

Schade, dass die klare Struktur der Sprache Pascal durch solche Modeerscheinungen immer mehr verwässert wird.


Pascal könnte von Anfang an nested Funktionen. Warum also nested Typen gegen den Stil von Pascal verstoßen sollten ist mir unklar. Ist doch das selbe Prinzip

Außerdem kann man sogar Typen innerhalb von Funktionen definieren (soweit ich weiß auch von Anfang an in pascal). Was im Vergleich zu dem was es schon immer gab, so schlimm an den nested Typen sein soll versteh ich beim besten Willen nicht

Mal ganz davon abgesehen das generische Typen ohne nested Typen in vielen Situationen recht witzlos wäre
Warf
 
Beiträge: 1067
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried