Stärken und Schwächen von Object Pascal

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Da schmeisst ihr was durcheinander. Es gibt in PASCAL einfache Typen, die vordefiniert sind. Dazu zählen;

- integer,
- string,
- boolean

usf.. PASCAL lässt einem aber auch die Freiheit einen selbst produzierten Typ, wie z.B. einen record einzuführen. Leitet man davon nun einen neuen Typ ab, wie z.B.:

TMyType = TMyrecord; // gilt auch für procedure oder function

dann wird daraus ein einfacher Typ, wie sie auch in der Sprache vorgegeben sind. Die "Dach"-Schreibweise für Pointer soll nur klarstellen, das es sich um einen Zeiger handelt. Konsequenterweise ist das nicht zwingend notwendig, deshalb fehlt das für Objekte.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Konsequenterweise ist es eben erforderlich weshalb fpc das auch zwingend erwartet. Delphi handhabt das etwas flachsiger und versucht selbst zu erkennen was man hier will jedoch ist fraglich ob das wirklich in jeder Sittuation perfekt funktioniert.
Was du jetzt da mit den typen willst kann ich mir nicht erklären es ging um die Benutzung von Zeigern
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Objekte sind nach der Deklaration ebenfalls "einfache" Typen, deshalb können sie auch Funktions-Ergebnis sein.

Das kann doch so schwer nicht zu verstehen sein?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nicht einfache Typen, sondern Pointer ich versteh trotzdem noh nicht wo sich jetzt jemand geirrt hat.

TMyType = TMyrecord; und TMyType ist danach kein "einfacher Typ" sondern immernoch ein Record was aber auch ein pascal Standarttyp ist ich weiss nicht wo du hier nen unterschied machst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Siehste Christian, genau da hast du offenbar etwas nicht verstanden. Nach der Deklaration im "type-Abschnitt" ist alles was du da deklariert hast ein einfacher Typ. Das gilt auch für Pointer und deshalb auch für Objekte. Das hat schon N. Wirth so postuliert eben damit man diese Typen auch als Funktions-Ergebnis zurückgeben kann.

Sieh mal unter Funktionen nach, die können nur einfache Typen zurückgeben und genau deshalb gibt es die Deklarationen unter type.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Somit währen klassen ja auch einfache Typen... und mit Interger und soweiter gleichzusetzten, auch wenn sie eine andere Aufgabe erfüllen.
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Sischer dat,

deshalb kann eine Funktion eben nicht als Ergebnis:

array[0..] of anytype;

haben. Das ist nämlich kein einfacher Typ.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

schnullerbacke hat geschrieben:Sischer dat,

deshalb kann eine Funktion eben nicht als Ergebnis:

array[0..] of anytype;

haben. Das ist nämlich kein einfacher Typ.

... es sei denn, man definiert einen einfachen Typ
ArrayTyp=array of anytype; :)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Und wo hab ich jetzt was falsch verstanden ? Du hast gesagt

TMyType = TMyrecord; // gilt auch für procedure oder function

dann wird daraus ein einfacher Typ,

Was quatsch ist da TMyrecord schon ein "einfacher Typ" ist.

und wenn du ne Klasse deklarierst ist das ne Klasse und ne Klasse ist ein Typ solange bis du sie einer Variable zuweist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ich wusste gar nicht das man eine Klasse eine Variable zuweist oder meinst du Installisieren ?
also z.b.var:=TStringlist.Create
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

pluto hat geschrieben:Ich wusste gar nicht das man eine Klasse eine Variable zuweist oder meinst du Installisieren ?
also z.b.var:=TStringlist.Create
Naja, vorher musst du ja dieser Variablen die Klasse zuweisen:

var variable: TStringlist;

Nehme an, das meinte der Christian.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

pluto hat geschrieben:Ich wusste gar nicht das man eine Klasse eine Variable zuweist oder meinst du Installisieren ?
also z.b.var:=TStringlist.Create
Du machst beides.

Code: Alles auswählen

TStringlist.Create
Erzeugt und initialisiert das Objekt/Klasse und mit

Code: Alles auswählen

var:=
Weist du den Referenzzeiger einer Variablen zu. Damit kannst du später auch noch darauf zugreifen.

Bei diesem Beispiel benötigst du keine explizite Variable zum Speichern des Objektes.

Code: Alles auswählen

.....
with TStringlist.Create do
begin
  add('Zeile1');
  add('Zeile2');
  // hier etwas mit stringliste machen
  free;
end;
.....
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten