AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ist Delphi so Bedeutungslos ?

Ein Thema von ATS3788 · begonnen am 12. Feb 2013 · letzter Beitrag vom 28. Feb 2013
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Ist Delphi so Bedeutungslos ?

  Alt 15. Feb 2013, 13:29
Vorweg: Ich halte meinen Beitrag für konstruktiv und zum Thema passend, aber falls ein Mod der Meinung ist, dass er das Thema sprengt, dann darf er ihn gerne in einen separaten Thread auslagern.
Eben genau solche Beispiele. Zum Beispiel was du in Delphi hättest machen müssen, aber durch entsprechende Features (also Traits, Duck Typing, Type Inference, etc.) in einer anderen Sprache übersichtlicher oder einfacher hinbekommen hast.
OK. Fangen wir mal mit Type Inference an. Wie sehen anonyme Funktionen in Delphi aus (Beispiel aus der Doku)?
Delphi-Quellcode:
type
  TFuncOfInt = reference to function(x: Integer): Integer;

function MakeAdder(y: Integer): TFuncOfInt;
begin
  Result := function(x: Integer)
    begin
      Result := x + y;
    end;
end;
Bitte was? Eigentlich ist das Konzept auch dazu gedacht, Code kürzer und pregnanter schreiben zu können. Aber das ist ja mal gelinde gesagt größtenteils Code Noise. Mit Inferer könnte das ganze logisch völlig äquivalent (und nach wie vor typsicher) z.B. so aussehen:
Delphi-Quellcode:
function MakeAdder(y: Integer): Integer => Integer;
begin
  Result := x => x + y;
end;
Anonyme Funktionen sind ein gutes Beispiel für das, was ich mit „nicht Pascal-like“ meinte. Ich finde dieses Konstrukt zwar sehr praktisch, wenn ich mit c-artigen Sprachen arbeite, aber IMO lässt sich das mit einer Pascal-Syntax einfach nicht gescheit umsetzen, ohne dass es wie ein Fremdkörper wirkt (das schließt beide obigen Varianten mit ein).

Pascal ist eine sehr explizite Sprache, was sicher daran liegt, dass sie ursprünglich für die Lehre konzipiert wurde. Deshalb schreiben wir in Pascal ja auch „begin“ und „end“ statt „{“ und „}“, Funktionsdeklarationen enthalten (anders als etwa in C) explizit das Wort „function“, Variablendeklarationen sind nur im „var“-Block möglich usw...
Dazu passt so ein Konzept wie lambda-Funktionen einfach nicht, weil der Witz ja gerade darin besteht, Informationen wegzulassen, um den Code zu verschlanken. Das beißt sich mit dem Pascal-Konzept, alles explizit hinzuschreiben.

Ich halte es nicht für sinnvoll, wild Konzepte aus anderen Sprachen in Pascal einzupflanzen. Sprachdesign heißt halt auch, manche Dinge wegzulassen. Bei anderen Sprachen sind wir es doch auch gewohnt, dass sie bestimmte Konzepte zugunsten anderer Konzepte weglassen...

Auch Pascal hatte seinerzeit innovative Konzepte – z.B. gibt es nested functions, weshalb z.B. der Bedarf für anonyme Funktionen gar nicht so groß ist. Man sollte lieber dieses Konzept ausbauen... nested functions sind z.B. wie gemacht für Closures (und die wiederum passen super zum Sichtbarkeitsprinzip von Pascal):

Delphi-Quellcode:
type
  TFuncOfInt = function(x: Integer): Integer;

function MakeAdder(y: Integer): TFuncOfInt;
  function Add(x: integer): Integer;
  begin
    Result := x + y;
  end;
begin
  Result := Add;
end;
Es ist eigentlich naheliegend, aber soweit ich weiß geht es immer noch nicht.

Geändert von Namenloser (15. Feb 2013 um 13:31 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz