Delphi-PRAXiS
Seite 13 von 33   « Erste     3111213 141523     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Ist Delphi so Bedeutungslos ? (https://www.delphipraxis.net/173199-ist-delphi-so-bedeutungslos.html)

Meflin 15. Feb 2013 10:32

AW: Ist Delphi so Bedeutungslos ?
 
Zitat:

Zitat von JamesTKirk (Beitrag 1203332)
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;
Weiter zum Thema AOP. Damit kann ich z.B. mit weniger als 10 Zeilen Code an einer gebündelten Stelle einen kompletten Call Tree Logger implementieren, der z.B. JEDEN Methodencall loggt. Das ganze ist auch wunderbarst optional einkompilierbar, d.h. in der Production-Version ist der Code einfach nicht drin. Ansatzweise sähe das so aus (AspectJ):
Code:
public aspect TraceCalls {
  pointcut aCall : call(* *(..));
  before() : aCall() {
    System.out.println(thisJoinPoint);
  }
}
Das einzige was mir da in Delphi bleibt, ist in JEDER Methode einen Log-Aufruf zu implementieren und am besten noch mit ifdefs zu umschließen, damit das ganze auch optional reinkompiliert werden kann. ODer ich brauche ein special-prupose Logging-Tool, das den Code entsprechend instrumentieren kann. Muss ich noch viel mehr dazu sagen?

Weiter zum Thema Traits. Traits sind enorm vielseitig einsetzbar, und deren Mächtigkeit habe ich selbst glaube ich auch noch nicht vollumfänglich erfasst. z.B. kann man damit Multiple-Inheritance-ähnliche Dinge machen, allerdings mit deutlich weniger Brainfuck. Man kann auch einfach beliebige Funktionalität an beliebige Objekte drankleben. z.B. könnte man damit folgendes implementieren (gewürzt mit Duck Typing):
Code:
type ConvertibleToString: { def toString: String }

trait Signature { self => ConvertibleToString
 
  var signature: String = ""

  def isSigned: Bool = ...
  def sign(key: String) = ... // Implementation über self.toString

}

// und jetzt kann ich alles, was eine toString Methode hat, damit signieren.
val s = new List("a", "b", "c") with Signature
s.sign("secret")
Oha. Ein beliebiges Objekt hat nun plötzlich eine Signatur und wäre somit quasi vor Änderung geschützt (wobei man in echt vermutlich eher auf Serializable gehen sollte, anstelle von toString). Ist in Delphi einfach völlig unmöglich. Was da am nächsten hinkäme, wäre dann, eine Art Service zu haben, der Signaturen für Objekte verwaltet. Aber mal ganz ehrlich: Was davon ist der bessere Code?

Duck Typing ist auch extrem nützlich, wenn man mit Interfaces zu tun hat, die man selbst nicht manipulieren kann - also z.B. alles was Teil der Standardlibrary ist. Ich kann einfach Funktionen definieren, die alles als Input schlucken, was eben die Methoden hat, die ich in dieser Methode brauche - ohne dass dafür dieses Objekt ein explizites Interface implementieren müssten. Sprich ich kann damit ganz leicht Kompatibilität herstellen, wo sie das Typsystem ohne tieferen Sinn "zerstört" hat.

Zitat:

Ich frag mich immer was die ganzen Bullshit-Bingo-Spieler des OOP noch hier im Delphi-Forum suchen
Man kann sich natürlich auch auf dem Wissensstand vor 20 Jahren ausruhen - weil eigentlich sind das ja alles nur völlig wertlose Buzzwords :roll:

DeddyH 15. Feb 2013 10:49

AW: Ist Delphi so Bedeutungslos ?
 
Manchmal stelle ich mir die Frage, ob ich noch auf der Delphi-PRAXiS bin oder auf troll-selbstbeweihraeucherung.de. Ich will ja gar nicht verhehlen, dass einige Dinge in Delphi fehlen oder nicht optimal umgesetzt sind oder es für gewisse Aufgaben schlicht das falsche Werkzeug ist, aber man muss es ja nicht nutzen. Aber darin, nur auf Threads wie diese zu lauern, um endlich mal wieder loswettern und zig andere Sprachen ins Feld führen zu können, sehe ich keinen Sinn. Aber da man ja ach so produktiv ist, hat man wahrscheinlich zu viel Zeit. Mir persönlich wäre das zu blöd.

greenmile 15. Feb 2013 10:53

AW: Ist Delphi so Bedeutungslos ?
 
Sehe ich auch so. Wir sitzen alle in einem Boot.

Phoenix 15. Feb 2013 10:56

AW: Ist Delphi so Bedeutungslos ?
 
Zitat:

Zitat von greenmile (Beitrag 1203680)
Sehe ich auch so. Wir sitzen alle in einem Boot.

Ja. Es heisst Titanic... :stupid:

haentschman 15. Feb 2013 10:57

AW: Ist Delphi so Bedeutungslos ?
 
:thumb: Volle Zustimmung. @DeddyH
Stellt ihr euch auch in den Discounter und meckert weil der Joghurt X nur rechtsdrehende Joghurtdingens hat, der andere aber linksdrehende, welche man noch geschwindigkeitsregeln kann... :roll:
Man muß einfach auch mal wissen wann man die Klappe zu halten hat.

Meflin 15. Feb 2013 11:01

AW: Ist Delphi so Bedeutungslos ?
 
Zitat:

Zitat von haentschman (Beitrag 1203682)
Man muß einfach auch mal wissen wann man die Klappe zu halten hat.

Ich wurde gefragt, ich habe geantwortet. Wie heißt es immer so schön: wenn es dich nicht interessiert, brauchst du es ja nicht zu lesen.

Aber ich mag euch auch :kiss:

PhilmacFLy 15. Feb 2013 11:05

AW: Ist Delphi so Bedeutungslos ?
 
Und einmal mehr wünsche ich mir für post von DeddyH einen Dankeknopf unter dem post

bernau 15. Feb 2013 11:29

AW: Ist Delphi so Bedeutungslos ?
 
Zitat:

Zitat von mschaefer (Beitrag 1203610)
Unter Delphi gibt es auch noch Möglichkeiten:

Spannend finde das UniGui-Projekt. Mit dem hohem Anteil gleichen Codes für den Webserver, als auch den Dektop zu programmieren, das könnte viel Zeit sparen. Sowohl bei der Programmierung, als auch bei der Einarbeitung von Entwickler und Endanwender.

Grüße in die Runde // Martin


Na das sieht ja richtig gut aus. Gefällt mir.

Sherlock 15. Feb 2013 13:17

AW: Ist Delphi so Bedeutungslos ?
 
Zitat:

Zitat von Meflin (Beitrag 1203677)
Zitat:

Ich frag mich immer was die ganzen Bullshit-Bingo-Spieler des OOP noch hier im Delphi-Forum suchen
Man kann sich natürlich auch auf dem Wissensstand vor 20 Jahren ausruhen - weil eigentlich sind das ja alles nur völlig wertlose Buzzwords :roll:

1) Gratuliere zum 4.800sten Post :cheers::party:
2) Mit 30 Jahren Entwicklungserfahrung versichere ich dir folgendes: Je mehr Du auf die kleinen bis großen Nettigkeiten vertraust, die im Rahmen der Buzzword-Befriedigung irgendwo eingebaut werden, desto schlechtere Karten hast Du, in Deinen komfortablen Dreizeilen Fehler zu finden. Das heisst nicht, daß ich Maschinencode befürworte. Ein gesundes Mittelmaß ist angesagt. Und das bietet Delphi IMHO.

Sherlock

Namenloser 15. Feb 2013 13:29

AW: Ist Delphi so Bedeutungslos ?
 
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.
Zitat:

Zitat von Meflin (Beitrag 1203677)
Zitat:

Zitat von JamesTKirk (Beitrag 1203332)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.
Seite 13 von 33   « Erste     3111213 141523     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz