TArray

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

TArray

Beitragvon Mathias » 15. Mai 2018, 15:53 TArray

Ich wollte mal TArray ausprobieren, aber es kommt nur zu einem Syntax-Fehler.
Code: Alles auswählen
type
  Ta= TArray<Byte>;
var
  a: TArray<Byte>;
Code: Alles auswählen
unit1.pas(34,13) Fatal: Syntax error, ";" expected but "<" found

Was mache ich falsch ?

So nebenbei gibt es TArray 2x .

Einmal in syshelph.inc
Code: Alles auswählen
{%mainunit syshelpers.pp}
 
Type
  generic TArray<T> = array of T;


Un einmal in der Unit DynamicArray:
Code: Alles auswählen
  TArray=Class
  private
    FCols: TFpList;
    FOnDestroyItem: TOnNotifyItem;
    FOnNewItem: TonNotifyItem; 
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Niesi » 15. Mai 2018, 17:13 Re: TArray

Mathias hat geschrieben:Ich wollte mal TArray ausprobieren, aber es kommt nur zu einem Syntax-Fehler.
Code: Alles auswählen
type
  Ta= TArray<Byte>;
var
  a: TArray<Byte>;
Code: Alles auswählen
unit1.pas(34,13) Fatal: Syntax error, ";" expected but "<" found

Was mache ich falsch ?

So nebenbei gibt es TArray 2x .

Einmal in syshelph.inc
Code: Alles auswählen
{%mainunit syshelpers.pp}
 
Type
  generic TArray<T> = array of T;


Un einmal in der Unit DynamicArray:
Code: Alles auswählen
  TArray=Class
  private
    FCols: TFpList;
    FOnDestroyItem: TOnNotifyItem;
    FOnNewItem: TonNotifyItem; 



Versuch mal bitte hinter dem "=" ein "specialize".

Also
type
tMyArray = specialize tArray<integer>;

Geht bei mir ...

.
Niesi
 
Beiträge: 62
Registriert: 26. Jun 2016, 18:44

Beitragvon Mathias » 15. Mai 2018, 17:31 Re: TArray

Danke, dies funktioniert.
Code: Alles auswählen
var
  a0: specialize TArray<byte>;
  a1: array of byte;


Was hat TArray für einen Vorteil gegenüber von array of ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 15. Mai 2018, 18:08 Re: TArray

Welchen Vorteil hat der Aufruf "s.Length" gegenüber "Length(s)" bei einem String s?
wp_xyz
 
Beiträge: 2651
Registriert: 8. Apr 2011, 08:01

Beitragvon Socke » 15. Mai 2018, 19:21 Re: TArray

Mathias hat geschrieben:Was hat TArray für einen Vorteil gegenüber von array of ?


Im Quelltext steht was:
objpas.pp hat geschrieben:Slightly Less useful in FPC, since dyn array compatibility is at the element level.
But still useful for generic methods and of course Delphi compatibility
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2546
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 Mathias » 15. Mai 2018, 19:30 Re: TArray

Etwas weniger nützlich in FPC, da die Dyn-Array-Kompatibilität auf der Elementebene liegt.
Aber immer noch nützlich für generische Methoden und natürlich Delphi-Kompatibilität

Anscheinend wegen Delphi, kennt Delphi keine dynamische Array ? :roll:

Was ich mir noch vorstellen kann, für Umsteiger von C++.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 15. Mai 2018, 21:12 Re: TArray

Mathias hat geschrieben:Anscheinend wegen Delphi, kennt Delphi keine dynamische Array ? :roll:

Weil Delphi diesen Typ hat, ist er auch in Free Pascal vorhanden.

Der andere Fall (generische Methoden) sehen in etwa so aus:
Code: Alles auswählen
type
  generic TMyClass<x> = class
    procedure Process(a: specialize TArray<Byte>);
  end;

Auch hier gilt: man kann es auch anders schreiben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2546
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 Warf » 16. Mai 2018, 00:20 Re: TArray

wp_xyz hat geschrieben:Welchen Vorteil hat der Aufruf "s.Length" gegenüber "Length(s)" bei einem String s?


Grundsätzlich keinen, aber grade wenn man mehrere funktionen kombiniert finde ich es deutlich angenehmer vom Schreibfluss z.B.:
Code: Alles auswählen
Str.Length.ToString;
//vs
IntToStr(Length(Str));
Warf
 
Beiträge: 985
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 Mathias » 16. Mai 2018, 07:30 Re: TArray

Kann man dies nich auch mit type helper machen ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon fliegermichl » 16. Mai 2018, 08:01 Re: TArray

Eben glaube ich nicht was ich da sehe.

Seit wann kann man denn in Pascal s.Length.ToString schreiben wenn s mit var s : string deklariert wurde?
fliegermichl
 
Beiträge: 202
Registriert: 9. Jun 2011, 08:42

Beitragvon Mathias » 16. Mai 2018, 08:11 Re: TArray

Seit 3.0.0 .

Gucke mal die type helper an.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 16. Mai 2018, 08:12 Re: TArray

Mathias hat geschrieben:Kann man dies nich auch mit type helper machen ?

Das sind doch welche.

fliegermichl hat geschrieben:Seit wann kann man denn in Pascal s.Length.ToString schreiben wenn s mit var s : string deklariert wurde?

Seit 3.0. http://wiki.freepascal.org/Type_Helper/de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1970
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon fliegermichl » 16. Mai 2018, 08:29 Re: TArray

Danke für die Info. Man lernt nie aus.
fliegermichl
 
Beiträge: 202
Registriert: 9. Jun 2011, 08:42

Beitragvon pluto » 22. Mai 2018, 12:29 Re: TArray

Str.Length.ToString;

Das wird dann aber schnell unübersichtlich, wenn man das so fortführen würde.

Ich finde einfach Lenght(str) ist ein Schritt und Den Integer in einem String zu wandeln wäre ein zweiter.
Aber diese Syntax verbindet diese beiden Schritte zu einem Schritt.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6672
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon wp_xyz » 22. Mai 2018, 12:57 Re: TArray

pluto hat geschrieben:
Str.Length.ToString;

Das wird dann aber schnell unübersichtlich, wenn man das so fortführen würde.

Ich finde einfach Lenght(str) ist ein Schritt und Den Integer in einem String zu wandeln wäre ein zweiter.
Aber diese Syntax verbindet diese beiden Schritte zu einem Schritt.

Nein das hat nichts mit dieser neuen Syntax zu tun. Mit der "alten" klassischen Pascal Schreibweise kann man ja dasselbe genauso verschachtelt schreiben:
Code: Alles auswählen
  WriteLn(IntToStr(Length(Str)));

Der Unterschied ist, dass man bei der alten Schreibweise Funktionen vor dem Operanden anfügt, bei der neuen hinter dem Operanden. Für manche Leute könnte die neuen Schreibweise den Vorteil haben machen, dass man keine Klammern mehr zählen muss (aber wer mit der Klammerhervorhebung des Lazarus-Editors noch Klammern zählt, ist selbst schuld). Der Nachteil ist m.E., dass die Typehelper ja nicht zum Standardumfang von Pascal gehören, sondern selbst erst mal programmiet werden mussten. D.h. das Programm wird wegen m.E. unnötigem Code aufgebläht. Und zur Zeit gibt es auf der FPC-Mailingliste auch eine Diskussion, warum die Compilierzeit mit fpc-trunk länger ist als mit 3.0.2, und da stehen tatsächlich die Typehelper auf der Verdachtsliste.

Das alles nur, weil manche Leute unbedingt Pascal zu Javascript machen möchten und weil diese Schreibweise nun halt mal "modern" ist. Aber das Jammern hilft nichts: Die Dinger sind nun mal da und werden nicht mehr verschwinden.
wp_xyz
 
Beiträge: 2651
Registriert: 8. Apr 2011, 08:01

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Freepascal



Wer ist online?

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

porpoises-institution
accuracy-worried