Funktion Concat

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Funktion Concat

Beitrag von Mathias »

Hier kann man auch streiten, was leserlicher ist. Ich benutze gerne das += .

Code: Alles auswählen

s := s + 'abc';
s += 'abc'
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Funktion Concat

Beitrag von m.fuchs »

Da kann man nicht streiten was leserlicher ist, da ist es klar: die erste Zeile.
Die += Variante ist nur für Schreibfaule. Wobei die Frage ist warum man als schreibfauler Programmierer ausgerechnet Pascal nutzen möchte.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Funktion Concat

Beitrag von six1 »

Es gab ja schon mal die Frage, ob Pascal überhaupt noch zeitgemäß ist.
Ich denke, so ein bisschen "erneuern" schadet nicht.
Gerade, wenn man von anderen Sprachen zu Pascal stößt, vielleicht nebenher noch ein bisschen in PHP werkelt, ist es doch gut, wie bei genannten Beispiel, nicht erst ConCat finden zu müssen und ein "+=" oder auch "+" verwenden zu können.
PascalDragon hat ja auch angemerkt, dass es "hintendran" keinen Unterschied macht.
Ich finde auch nicht, dass die zwei Operatoren "+" oder "+=" den Code unleserlich oder unverständlich machen würden.
Da gibt es wirklich ganz andere Dinge in anderen Sprachen.... 8)
Gruß, Michael

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Funktion Concat

Beitrag von Warf »

Winni hat geschrieben:
Mi 29. Jul 2020, 18:37
Das ist eine Verhunzung und Überfrachtung der Sprache.
Wo das endet, sieht man bei Ada. Grusel.
Operatoren überladen ist doch genial, und vor allem wenn man mal mit vektoren und matrizen rechnen muss ist das viel angenehmer:

Code: Alles auswählen

res := v1 * m1 + v2;
// vs
res := AddVector(MultiplyMatrix(v1, m1), v2);
Für mich stellt sich da keine frage was lesbarer ist.

Und man kann operatoren ja noch viel mehr verwenden, für einen TPath typen den ich mal geschrieben hab:

Code: Alles auswählen

procedure CopyJpegs(source: TDirectory; Target: TPath);
var
  jpg: TFileInfo;
begin
  for jpg in source/'**/*.jpg' do
    jpg.Copy(Target/jpg.Path.RelativeTo(source));
end;
Dank operator überladung muss ich an dieser stelle kein einziges mal wissen ob ich Unix pfade (/) oder Windows pfade benutze (\), es funtioniert einfach
PS: man sieht es hier vielleicht nicht direkt, aber hier sind nicht nur der / operator am werk, sondern auch 2 Impliziete casts. Ohne operator überladen wäre das nicht möglich.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Funktion Concat

Beitrag von six1 »

PS: man sieht es hier vielleicht nicht direkt, aber hier sind nicht nur der / operator am werk, sondern auch 2 Impliziete casts. Ohne operator überladen wäre das nicht möglich.
In deinem Code unter deinem Zugriff kein Problem.
Wenn ich als Außenstehender den Code sehe, würde ich denken: Sieht irgendwie nach Pascal aus, aber ich verstehe es nicht. :mrgreen:
Gruß, Michael

Benutzeravatar
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

Beitrag von Winni »

six1 hat geschrieben:
Do 30. Jul 2020, 15:08
Es gab ja schon mal die Frage, ob Pascal überhaupt noch zeitgemäß ist.
Ich denke, so ein bisschen "erneuern" schadet nicht.
Ich hab ja mal die Frage, ob das Rad überhaupt noch zeitgemäß ist.
Ich glaube, man sollte er mit einem Oktagon erneuern.

Winni

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Funktion Concat

Beitrag von Warf »

In deinem Code unter deinem Zugriff kein Problem.
Wenn ich als Außenstehender den Code sehe, würde ich denken: Sieht irgendwie nach Pascal aus, aber ich verstehe es nicht.
Ist doch eigentlich ziemlich offensichtlich, **/pattern ist ein ziemlich allgemeingültiger ausdruck um eine rekursive suche zu machen (wird so von java oder python und sogar verschiedenen shells wie zsh unterstützt), und pfade mit / zu conkatinieren finde ich deutlich intuitiver als:

Code: Alles auswählen

IncludeTrailingPathDelimiter(source) + ExcludeLeadingPathDelimiter(Target)
Das einzige was man wissen muss ist das es die typen TFileInfo, TDirectory gibt die sich impliziet nach TPath und zurück convertieren lassen. TDirectory stellt dateisuchen bereit und TFileInfo datei operationen wie copy oder rename
Zuletzt geändert von Warf am Do 30. Jul 2020, 15:37, insgesamt 1-mal geändert.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Funktion Concat

Beitrag von Warf »

Winni hat geschrieben:
Do 30. Jul 2020, 15:28
Ich hab ja mal die Frage, ob das Rad überhaupt noch zeitgemäß ist.
Ich glaube, man sollte er mit einem Oktagon erneuern.

Winni
Naja, wenn man eine alternative zum rad findet die stabiler, komfortabler und einfacher ist, würde ich sagen wir sollten das rad damit ersetzen.

Ich mein mit anderen Sprachen kann man sehr of viele Dinge viel einfacher und schneller machen und ist noch dazu weniger Fehleranfällig, bzw. in sprachen wie C# oder Java, wenn du da nen fehler hast ist das nicht einfach "SIGSGV XXXXX' sondern du bekommst eine detailierte beschreibung mit einer vorschlagsliste an fixes.

Das ding ist, der FPC erlaubt für sehr moderne konstrukture (siehe meine TPath klasse von vorher), die muss man nur alle selbst bauen weil die standardlibrary doch sehr altbacken ist

Benutzeravatar
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

Beitrag von Winni »

Warf hat geschrieben:
Do 30. Jul 2020, 15:37
[
Ich mein mit anderen Sprachen kann man sehr of viele Dinge viel einfacher und schneller machen und ist noch dazu weniger Fehleranfällig, bzw. in sprachen wie C# oder Java, wenn du da nen fehler hast ist das nicht einfach "SIGSGV XXXXX' sondern du bekommst eine detailierte beschreibung mit einer vorschlagsliste an fixes.
Dann bist Du wohl kein "echter Progrmmier":

http://www.bruder-franziskus.de/satire/it0.htm

Winni

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Funktion Concat

Beitrag von Mathias »

Winni hat geschrieben:
Do 30. Jul 2020, 21:08
Warf hat geschrieben:
Do 30. Jul 2020, 15:37
[
Ich mein mit anderen Sprachen kann man sehr of viele Dinge viel einfacher und schneller machen und ist noch dazu weniger Fehleranfällig, bzw. in sprachen wie C# oder Java, wenn du da nen fehler hast ist das nicht einfach "SIGSGV XXXXX' sondern du bekommst eine detailierte beschreibung mit einer vorschlagsliste an fixes.
Dann bist Du wohl kein "echter Progrmmier":

http://www.bruder-franziskus.de/satire/it0.htm

Winni
Ein bisschen Wahrheit steckt da schon dahinter.

Übrigens konnte man auch mit gw-basic lesbarer Code schreiben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 825
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

Beitrag von PascalDragon »

Warf hat geschrieben:
Do 30. Jul 2020, 15:37
Ich mein mit anderen Sprachen kann man sehr of viele Dinge viel einfacher und schneller machen und ist noch dazu weniger Fehleranfällig, bzw. in sprachen wie C# oder Java, wenn du da nen fehler hast ist das nicht einfach "SIGSGV XXXXX' sondern du bekommst eine detailierte beschreibung mit einer vorschlagsliste an fixes.
Ich glaube du verwechselst hier das, was die IDE dir bei Compilefehlern vorschlägt mit dem was dir zur Laufzeit um die Ohren fliegt. Also zumindest ich bekomme zur Laufzeit auch nur schnöde Exceptions mit Stacktrace, sei es jetzt C#, Java oder Object Pascal. Zur Kompilierzeit kriegst du in Lazarus nur eine Zugriffsverletzung, wenn entweder in Lazarus oder im Compiler ein Bug ist. Und Lazarus bietet dir per Rechtsklick auf Fehler auch teilweise Abhilfen an, zumindest wenn diese implementiert und umsetzbar sind.
Gerade in 2.0.10 getestet: ich hatte einen nicht gefundenen Bezeichner (in meinem Beispiel TRegistry). Lazarus bietet bei Rechtsklick auf den Fehler im Nachrichtenfenster oder auf das "!" im Gutter links bei der Fehlerstelle an danach zu suchen (sowohl mit Code-Browser als auch - falls installiert - mit Cody), ist der Bezeichner gefunden, dann kannst du dessen Unit recht einfach hinzufügen.
FPC Compiler Entwickler

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Funktion Concat

Beitrag von Warf »

Stimmt die vorschläge sind von der IDE, dennoch sind die Fehler die man bei Pascal produziert recht eklig, in C# oder Java hat man einfach keine Segfaults und wenn man fehler hat (wie nullpointer dereference) bekommt man eine sehr detailierte exception weil die IR deutlich mehr infos hat als das assembly was durch den fpc generiert wird
PascalDragon hat geschrieben:
Fr 31. Jul 2020, 09:30
Gerade in 2.0.10 getestet: ich hatte einen nicht gefundenen Bezeichner (in meinem Beispiel TRegistry). Lazarus bietet bei Rechtsklick auf den Fehler im Nachrichtenfenster oder auf das "!" im Gutter links bei der Fehlerstelle an danach zu suchen (sowohl mit Code-Browser als auch - falls installiert - mit Cody), ist der Bezeichner gefunden, dann kannst du dessen Unit recht einfach hinzufügen.
Cool kannte ich noch gar nicht

Benutzeravatar
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

Beitrag von Winni »

Warf hat geschrieben:
Fr 31. Jul 2020, 14:13
Stimmt die vorschläge sind von der IDE, dennoch sind die Fehler die man bei Pascal produziert recht eklig, in C# oder Java hat man einfach keine Segfaults und wenn man fehler hat (wie nullpointer dereference) bekommt man eine sehr detailierte exception weil die IR deutlich mehr infos hat als das assembly was durch den fpc generiert wird
Hi!

Das ist ja nun per Design, dass Java und C ans Kreuz nun keine Sprachen für Erwachsene sind, sondern für Studenten. Dann mach mal ein paar lowlevel Jobs in Java: Viel Spaß!

Winni

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Funktion Concat

Beitrag von six1 »

Winni hat geschrieben:
Fr 31. Jul 2020, 14:52
...C ans Kreuz...
:lol: :lol: :lol:
Gruß, Michael

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Funktion Concat

Beitrag von Warf »

Winni hat geschrieben:
Fr 31. Jul 2020, 14:52
Das ist ja nun per Design, dass Java und C ans Kreuz nun keine Sprachen für Erwachsene sind, sondern für Studenten. Dann mach mal ein paar lowlevel Jobs in Java: Viel Spaß!
Ja, man glaubts kaum moderne sprachen werden so designed das sie Fehler minimieren. Ich bin auch immernoch ein riesen fan von Optionalen typen die Null Pointer ersetzen. In Swift oder Kotlin hat man einfach damit Nullpointer Fehler komlett losgeworden. Dazu noch referenzzählung (Swift) oder Garbage collection (Kotlin) und Memory fehler sind praktisch unmöglich zu machen.

Oder auch ein tolles beispiel ist Rust, in Firefox wurde das Css modul jetzt in Rust neugeschrieben, und zu dem anlass hat man sich mal angesehen was für Bugs denn bisher darin gefunden wurde. Knapp die Hälfte (32) waren Memory Fehler (use after free, double free, Invalid pointer, etc.), die in Rust einfach per design nicht möglich sind. Alle samt waren Hoch sicherheitskritischen Bugs von denen es insgesammt nur 34 gab. Also allein durch das design von Rust hätte man, wenn es damals schon Rust gegeben hätte, 32 von 34 hoch sicherheitsbugs einfach verhindern können.

Lesenswert dazu: https://hacks.mozilla.org/2019/02/rewri ... t-in-rust/

Und ich finde es schon faszinierend wie durch simple design Entscheidungen die größten Fehlerquellen einfach wegfallen. Und ich denke schon das sprachen die relevant bleiben wollen sich damit auseinander setzen sollten. C++ hat z.b. auch Referenzzählung und Ownership konzepte bereits in den Standard aufgenommen.

Antworten