Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#102

AW: Delphi ist unbeliebt...angeblich

  Alt 8. Nov 2017, 13:18
Hm, Pascal ist teilweise so läääänglich, aber das ist nicht schlecht. Vielleicht mache ich zu viel Delphi, aber manchmal finde ich eine vier Zeilen lange anonyme Methode trotzdem lesbarer als ein kurzes Lambda.

Problem 1: in der RTL bietet TArray.Sort keine Überladung für TComparison<T>, so dass man das schreiben könnte:

Delphi-Quellcode:
TArray.Sort<Byte>(values,
  function(const left, right: Byte): Integer
  begin
    Result := (right - left)
  end);
Lösung: Spring.pas nutzen (oder selbst schreiben meinetwegen), das fügt diesen Oberload hinzu.


Problem 2: Anonyme Methoden sind halt keine Lamdbas und der Compiler ist dämlich (entschuldige, ich meine single pass mit begrenztem Look ahead), so dass er nur sehr begrenzt Type Inference betreiben kann und er somit die explizite Angabe der Signatur braucht um das dann in die entsprechende Methode zu packen. Der C# Compiler geht da vereinfacht ausgedrückt hin und nimmt erstmal die Lambda auseinander und konstruiert daraus dann die Signaturen und testet sie gegen die möglichen Overloads der aufzurufenden Methode (Eric Lippert erklärt das etwas in seinem Blog etwas besser - gibt noch zahlreiche weitere Artikel von ihm zu der Thematik).

Ob man nun begin/end, Klammern oder Emojis für Blöcke nimmt, darüber wird sich ja niemand ernsthaft streiten wollen.
Nicht nur begin/end, aber gibt genug, die meinen, nur weil man in Pascal z.B. Variablen vor dem begin deklarieren muss, macht es den Code irgendwie besser. Klar, Code mit drölfzig Variablen wird übersichtlicher als derselbe Code mit jeder Variable inline über zig Zeilen Code deklariert, aber das kann wohl kaum der Grund sein. Ich bekomm immer Herpes, wenn ich nur weil ich ne for Schleife habe, diese Variable oben deklarieren muss, anstatt an der Stelle wo ich sie brauchte (zusätzlich ergibt sich in C-Sprachen durch das scoping nicht die Problematik, mal einfach die Variable außerhalb der Schleife zu missbrauchen). Und ja, ich weiß, dass es IDE Tooling (aka "Code Vomit") für das automatische Deklarieren dieser Variablen gibt.

Zusätzlich gibt es keine Möglichkeit, eine Variable direkt mit einem Sinnvollen Wert zu befüllen. D.h. sie ist entweder solange in einem undefinierten Zustand (managed Typen mal ausgeklammert), bis ich ihr einen Wert zuweise. Was dazu führt, dass man entweder Unsinnscode schreibt, um erstmal alles auf Null/Leer zu setzen oder Bugs in Kauf nimmt oder auf den Compiler hofft, einem die Verwendung einer unitialisierten Variable aufzuzeigen (was im übrigen z.B. in C# by default ein Fehler und nicht nur eine Warnung ist).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 8. Nov 2017 um 13:28 Uhr)
  Mit Zitat antworten Zitat