AW: Ist Delphi so Bedeutungslos ?
Zitat:
Delphi-Quellcode:
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:
type
TFuncOfInt = reference to function(x: Integer): Integer; function MakeAdder(y: Integer): TFuncOfInt; begin Result := function(x: Integer) begin Result := x + y; end; end;
Delphi-Quellcode:
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):
function MakeAdder(y: Integer): Integer => Integer;
begin Result := x => x + y; end;
Code:
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?
public aspect TraceCalls {
pointcut aCall : call(* *(..)); before() : aCall() { System.out.println(thisJoinPoint); } } 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:
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?
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") 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:
|
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.
|
AW: Ist Delphi so Bedeutungslos ?
Sehe ich auch so. Wir sitzen alle in einem Boot.
|
AW: Ist Delphi so Bedeutungslos ?
Zitat:
|
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. |
AW: Ist Delphi so Bedeutungslos ?
Zitat:
Aber ich mag euch auch :kiss: |
AW: Ist Delphi so Bedeutungslos ?
Und einmal mehr wünsche ich mir für post von DeddyH einen Dankeknopf unter dem post
|
AW: Ist Delphi so Bedeutungslos ?
Zitat:
Na das sieht ja richtig gut aus. Gefällt mir. |
AW: Ist Delphi so Bedeutungslos ?
Zitat:
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 |
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:
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:
Es ist eigentlich naheliegend, aber soweit ich weiß geht es immer noch nicht.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr. |
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