Funktion Concat
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Funktion Concat
Ich bin Zufällig auf die Funktion Concat gestossen.
https://www.freepascal.org/docs-html/rt ... oncat.html
Hat die Funktion irgendwelche Vorteile gegenüber dem + ?
Hat das einen historischen Hintergrund.
Die Beschreibung hat noch einen kleinen Fehler, da steht, das bei 255 Zeichen abgeschnitten wird, ist aber bei einem Ansistring nicht der Fall.
https://www.freepascal.org/docs-html/rt ... oncat.html
Hat die Funktion irgendwelche Vorteile gegenüber dem + ?
Hat das einen historischen Hintergrund.
Die Beschreibung hat noch einen kleinen Fehler, da steht, das bei 255 Zeichen abgeschnitten wird, ist aber bei einem Ansistring nicht der Fall.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- 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:
Re: Funktion Concat
steht im Text
Hat mit dem Operator overloading zu tun. concat kenne ich noch von TP her, Lege es unter historisch ab, bzw. auf Plattformen, wo es kein operatoroveloading gibt, fall es das überhaupt noch gibt.The same operation can be performed with the + operation.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Funktion Concat
Hallo!
Concat ist Pascal und stammt von N. Wirth, ist also Original.
Die Verkettung von 2 Strings mit dem + Zeichen ist übelstes Basic .
Es wurde in Turbo Pascal eingeführt und wird nun 40 Jahre mitgeschleppt.
Winni
Concat ist Pascal und stammt von N. Wirth, ist also Original.
Die Verkettung von 2 Strings mit dem + Zeichen ist übelstes Basic .
Es wurde in Turbo Pascal eingeführt und wird nun 40 Jahre mitgeschleppt.
Winni
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Funktion Concat
Wen ich mich nicht täusche, geht das + unterdessen auch bei dynamischen Arrays.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Funktion Concat
Hi!
Das ist eine Verhunzung und Überfrachtung der Sprache.
Wo das endet, sieht man bei Ada. Grusel.
Man gewöhnt sich an allem - auch an dem Dativ!
Winni
Das ist eine Verhunzung und Überfrachtung der Sprache.
Wo das endet, sieht man bei Ada. Grusel.
Man gewöhnt sich an allem - auch an dem Dativ!
Winni
- photor
- Beiträge: 443
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
- CPU-Target: 64Bit
Re: Funktion Concat
Generiert das eine oder andere besseren Code? Oder ist es nur für die Schön- bzw. Reinheit des Sourcecodes wichtig (und damit Geschmackssache --> kein Streit)?
Ich gebe ja zu, dass ich üblicherweise auch "+" schreibe (aus Bequemlichkeit und weil es sich in meinen Augen besser liest), Ich habe aber letztens (in einem Python-Forum oder Tutorial) gelesen, dass die beiden Schreibweisen in Python möglich sind aber tatsächlich unterschiedlich schnellen Code produzieren (die "+"-Schreibweise führt wohl tatsächlich immer zu einem Umkopieren des Ursprungsstrings im Speicher; String.Concat("Blah") wohl nicht). Ich hab's bisher noch nicht getestet.
Ciao,
Photor
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Funktion Concat
Hallo!
Ich hab noch nicht in die system unit geguckt.
Aber ich habe eben einen Test gemacht:
2 Strings zu 80 ASCII per random erzeugt
a) 100 Mio s3 := s1+s2:
b) 100 Mio s3 := concat (s1,s2);
Mehrmals wiederholt. Mit leichten Abweichungen:
a) 845 ms
b) 825 ms
Mach 2.4% Differenz. Vergiss es.
Winni
Ich hab noch nicht in die system unit geguckt.
Aber ich habe eben einen Test gemacht:
2 Strings zu 80 ASCII per random erzeugt
a) 100 Mio s3 := s1+s2:
b) 100 Mio s3 := concat (s1,s2);
Mehrmals wiederholt. Mit leichten Abweichungen:
a) 845 ms
b) 825 ms
Mach 2.4% Differenz. Vergiss es.
Winni
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Funktion Concat
Das + ist auf jedenfall lesbarer.
Bei Concat musste ich erst googeln.
Bei Concat musste ich erst googeln.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Funktion Concat
Der FPC erzeugt für beide Varianten den selben Code. Je nach Anzahl und Typ der Strings, gibt es verschiedene Funktionen in der Datei "<fpcsrc>/rtl/inc/astrings.inc", z.B. fpc_AnsiStr_Concat für zwei Ansistrings und fpc_ansistr_concat_multi für mehr als zwei Ansistrings. Der +-Operator ist also wie beim Operator-Overloading nur eine andere Schreibweise für einen Funktionsaufruf.
Für Unicodestrings gibt's das gleich in "<fpcsrc>/rtl/inc/ustrings.inc"
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 830
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Funktion Concat
Nur wenn der Modeswitch ArrayOperators gesetzt ist (Standard in Mode Delphi), da hierdurch eventuelle Operatorüberladungen für + abgeschalten werden (gab da ein paar fette Beschwerden, als ich das damals auf der FPC-Devel Mailing Liste vorgestellt hatte). Concat funktioniert jedoch immer.
Ansonsten: der (eingebaute) + Operator und Concat führen intern zum gleichen Code.
FPC Compiler Entwickler
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Funktion Concat
Habe es gerade probiert, Concat geht auch mit einer Array, obwohl hier nichts davon steht: https://www.freepascal.org/docs-html/rt ... oncat.html
Funktioniert auch, macht einem das Coden einfacher.
Code: Alles auswählen
{$modeswitch arrayoperators}
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Funktion Concat
Naja, ich finde du übertreibst da ziemlich.
Das gibt es doch in den meisten moderneren Sprachen auch, von Java bis Python.
Concat erinnert doch eher an strcat() von C.
Ich möchte dieses Feature jedenfalls nicht missen.