AW: Neue Sprachfeatures in Delphi?
Meine Güte, ist das wieder ein Jammern auf hohem Niveau! :shock:
Ihr müsst die neuen Sprachfeatures nicht nutzen! Am Ende ist es eine Gewohnheitssache. An so Teufelszeug wie Generics, Anonyme Methoden oder vereinfachte Arraybehandlung ist eurer Quelltext auch nicht gestorben, oder? |
AW: Neue Sprachfeatures in Delphi?
Zitat:
So wie du ausschließlich die Nachteile siehst, sehen andere eben nur die Vorteile. Der Eine sieht in Feuer Gefahr und der Andere Behaglichkeit. Hier ein Beispiel wo diese Inlines den Code besser lesbarer machen:
Delphi-Quellcode:
{ Das funktioniert so nicht, denn es wird nur 10 ausgegeben }
procedure TaskTest1( ); var i: Integer; tasks: TArray<ITask>; o: TObject; begin Writeln( 'TaskTest1' ); o := TObject.Create; try SetLength( tasks, 10 ); for i := 0 to 9 do begin tasks[i] := TTask.Run( procedure begin TMonitor.Enter( o ); try Writeln( i ); finally TMonitor.Exit( o ); end; end ); end; TTask.WaitForAll( tasks ); finally o.Free; end; end; { Das muss man aktuell so schreiben } function BuildTask( i: Integer; const o: TObject ): ITask; begin Result := TTask.Run( procedure begin TMonitor.Enter( o ); try Writeln( i ); finally TMonitor.Exit( o ); end; end ); end; procedure TaskTest2( ); var i: Integer; tasks: TArray<ITask>; o: TObject; begin Writeln( 'TaskTest2' ); o := TObject.Create; try SetLength( tasks, 10 ); for i := 0 to 9 do begin tasks[i] := BuildTask( i, o ); end; TTask.WaitForAll( tasks ); finally o.Free; end; end; { Oder mit den Inlines geht es eben so } procedure TaskTest3( ); var i: Integer; tasks: TArray<ITask>; o: TObject; begin Writeln( 'TaskTest1' ); o := TObject.Create; try SetLength( tasks, 10 ); for i := 0 to 9 do begin var val := i; tasks[i] := TTask.Run( procedure begin TMonitor.Enter( o ); try Writeln( val ); finally TMonitor.Exit( o ); end; end ); end; TTask.WaitForAll( tasks ); finally o.Free; end; end; |
AW: Neue Sprachfeatures in Delphi?
Ja es gibt viele, die sich das gewünscht haben.
Es gibt auf FB und G++ ja diverse Wunschlisten für neue Features. Dieses stand ganz oben. Aber nur weil viele ein Feature wünschen, ist es noch nicht sinnvoll: Ein weiteres Feature, dass sich viele wünschen ist die Ersetzung von
Delphi-Quellcode:
mit
begin..end
Code:
.
{}
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
Diese Ersetzung von
Delphi-Quellcode:
kann dieses (soweit ich das sehe) nicht liefern.
begin .. end
Darum wurden wohl auch die Inlines realisiert (es gibt einen konkreten Nutzen ohne den alten Code zu brechen) und die
Delphi-Quellcode:
eben nicht.
{}
(*) Ja, mit einem Hammer kann man ganz toll Nägel in die Wand kloppen oder sich lebensgefährlich verletzen. Ist der Hammer also jetzt nützlich oder gefährlich? |
AW: Neue Sprachfeatures in Delphi?
Zumindest kann man mit einer Inline-Variablendeklaration auch eine lokale Variable initialisieren (muss dann noch nicht mal eine Konstante sein!). Das geht bisher so jedenfalls nicht ohne mindestens eine zusätzliche Zeile Code.
|
AW: Neue Sprachfeatures in Delphi?
Die Initialisierung bei der Deklaraion und die Verwendung von scoped Variablen für Schleifen ist positiv.
Aber die freie Dekalarationsmöglichkeit im Text (anstatt in der Var-Sektion) finde ich eher negativ. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
Naja, mal abwarten was wirklich kommt... |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zumindest ein halbes ;)
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Man könnte auch einfach eine ältere Delphiversion einsetzen ...
:mrgreen: |
AW: Neue Sprachfeatures in Delphi?
Für mich sind Inline Variablen ganz und gar nicht gleichzusetzen mit geringerer Übersicht und Chaos. Ganz im Gegenteil! Was hier oft vergessen wird, ist dass die Variablen an ein Scope gebunden sind. Also nur valide sind im Block in dem sie auch definiert wurden.
Kenne das von C++, wo man coole Sachen machen kann (weil dort auch Objekte automatisch den Destructor aufrufen, wenn die Instanz aus dem Scope läuft). Unter Delphi wird man hier mit Interfaces ähnliche Magie betreiben können. Jeder kennt so Funktionen, bei denen die Zählervariablen schon bei N oder weiter angelangt sind, oder generell der Variablenblock 10-20 Einträge hat. Oft ist das natürlich schlechtes Design, aber oft lassen sich diese Funktionen auch nicht gescheit aufteilen. Hier werden Inline Variablen die Übersicht deutlich erhöhen. Anderseits muss man natürlich ggfls. auch etwas suchen, bevor man die Deklaration findet - wobei die IDE hierfür ja Shortcuts hat. Also im Grunde wie schon erwähnt: Hat alles seine Vor- und Nachteile. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Die nächste Stufe wäre dann, dass jeder ohne nachzufragen seine eigenen Komponenten verwendet. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Delphi-Quellcode:
sondern halt so:
procedure Bla;
var x: integer = 3; begin ... end;
Delphi-Quellcode:
...also noch ne neue Süntacks?
procedure Bla;
begin var x: integer := 3; ... end; |
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
Ok, </OT> sonst klaut mir der Daniel noch die Flinte und macht Jagd auf mich :-) |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Delphi-Quellcode:
Bei so viel Scope braucht man bald ein Periscope :-D
function Produce: Integer;
var I: Integer; procedure SubProduce; var I: Integer; procedure SubSubProduce; begin for var I: Integer = 0 to 3 do begin // Irgendwas end; Inc(I, 17); end; begin Inc(I, 22); end; begin Inc(I, 1234); Result := I; end; |
AW: Neue Sprachfeatures in Delphi?
Endlich eine handliche Ablösung für "with":
Statt
Delphi-Quellcode:
schreiben wir jetzt
var cds: TClientDataSet; qry: TUniQuery;
begin cds := Datamodule.cds_Report; qry := Datamodule.qry_Sales; // ...viel Text... cds.FieldByName('bla').AsString := qry.FieldByName('bla').AsString;
Delphi-Quellcode:
// ...viel Text...
begin var cds := Datamodule.cds_Report; var qry := Datamodule.qry_Sales; cds.FieldByName('bla').AsString := qry.FieldByName('bla').AsString; ... end; P.S.: ja, man kann auch
Delphi-Quellcode:
schreiben. Breitbildschirm sei dank. Aber es gibt auch tiefer verschachtelte Fälle, und irgendwann wirds ziemlich unübersichtlich.
Datamodule.cds_Report.FieldByName('bla').AsString := Datamodule.qry_Sales.FieldByName('bla').AsString;
|
AW: Neue Sprachfeatures in Delphi?
Wenn mans genau nimmt würde der
Delphi-Quellcode:
-Block zwischen
var
Delphi-Quellcode:
und
procedure
Delphi-Quellcode:
nunmehr beinahe obsolete. Das kann doch nicht im Sinne des Erfinders sein.
begin
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Ich finde die Ideen gut und hilfreich.
Variablen dort zu deklarieren, wo sie gebraucht werden, finde ich sinnvoll. Wer will, kann sie ja direkt am Prozerduranfang deklarieren (oder optional vor dem "begin"). Auch einfach einen Alias für längere Variablennamen oder Member (var C = x.y.z.a.b.c;) definieren zu können, finde ich gut. Beides habe ich auch für meine Scriptsprache vorgesehen, an der ich bastle. Ich finde das nicht kryptisch sondern übersichtlich. Wichtig ist, dass Variablen vor der Verwendung deklariert werden müssen. @Codehunter Das Problem mit dem Scope von Inline-Prozeduren hat man ja jetzt auch schon. Nur die Verwendung von I in Schleifen wird jetzt halt abgelehnt. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Würde mich mal interessieren :) |
AW: Neue Sprachfeatures in Delphi?
[OT]
Ja, schreib mich mal per eMail an, dann schicke ich heute Abend etwas (Video)... [/OT] |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
Das wäre toll, wenn das wirklich bald möglich sein sollte. Aber die Codevervollständigung muss da auch mit zurecht kommen sonst bringt das nix. Bis heute kommt die Codevervollständigung auch nicht mit Unitnamen wie Meine.Utils.pas zurecht. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
...:cat:... |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Nein, der wäre auch einfach nur grottenschlecht. Merke: Inlines machen schlechten Code nicht besser. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Delphi-Quellcode:
Wenn du im FormCreate Meine eingibst. Poppt dann Meine.Utils(. etc) auf?
unit Meine.Utils;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private {Private-Deklarationen} public {Public-Deklarationen} end; function Test(AParam: Integer): Boolean; var Form1: TForm1; implementation {$R *.dfm} function Test(AParam: Integer): Boolean; begin Result := AParam = 1; end; procedure TForm1.FormCreate(Sender: TObject); begin Meine.Utils.Test( ... ) end; end. |
AW: Neue Sprachfeatures in Delphi?
Zitat:
Hatter erst vor wenigen Tagen einen Fall bei dem eine Scope-Sichtbare Variable den Fehler vermieten hätte (Reuse von Methoden-Globalen Variablen) |
AW: Neue Sprachfeatures in Delphi?
[etwas OT "Finden von Units"]
Bei meinem XE3 funktioniert das wie ein Blinklicht: geht - geht nicht - geht - geht nicht... Aber das liegt m.E. nicht an den Punkten. Die IDE kennt einfach mehrere Units nicht - auch nicht wenn man mit Ctrl auf eine Funktion o.ä. klickt oder eine Unit mit Ctrl-A sucht. Ich suche dann in der Hilfe, in welche Unit die betreffende Funktion wohl gehört. :-( @DieDolly Testen könnte ich Deinen Versuch erst heute Abend. [/etwas OT] |
AW: Neue Sprachfeatures in Delphi?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
...:cat:... |
AW: Neue Sprachfeatures in Delphi?
Mal zum eigentlichen Thema:
...:cat:... |
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Zitat:
|
AW: Neue Sprachfeatures in Delphi?
Es gibt praktisch keine Alternative zwischen vor dem äußersten Codeblock oder irgendwo. Es ist in PL/SQL teils überraschend wenn mitten im Programmfluss ein DECLARE daherkommt. In Modula II waren die geschachtelten Module noch exzessiver, deswegen hat diese Form der Schachtelung sich nicht verbreitet.
Damit verbleibt die C Variante - überall erlaubt und per Konvention beschränkt. { Variablendaklaration /*blendet gleichnamige aus den Umschließenden Blöcken aus */ } /* Sichtbarkeit der Variable endet hier */ Damit klopfen die Global im Einzelfall aus dem Motiv. Damit man auf den Wert gespeichert in einer Variable deklariert und definiert in einem äußeren Block kann zurückgreifen ... Bis vor 15 Jahren kann man sagen, dass Objekte tragende Säulen einer Implementierung waren und Hilfsvariablen als solche benamt erkennbar waren und zumeist Fundamentaldatentypen. Das ändert sich zusehends. Die Verwendung von Interfaces usw... Jetzt stellt sich die Frage. Was außer einer Deklaration nahe der Verwendung bleibt als Alternative und wie kann ich mir in einer Sprache die eine Konstruktoraufruf voraussetzt im Regelfall bei der endgültigen Verwendung im Rahmen der Anwendung mir die Typenangabe ala TMyType myObj = new TMyType(); sparen und man landet bei var myObj = new TMyType; -- Mir var ist es nicht getan. Der Minimalfall ist an sich das Iteratorobjekt. -- Das Thema, da stimme ich zu, ist so ausbaufähig, dass selbst schön geschriebener Code unlesbar wird oder nurmehr für jene die wissen was der Code eigentlich bedeutet. Ala APL :-D als der Paradevertreter einer Write Only Language. -- Der Zug der Zeit tuckert bezüglich solcher Sprachfeatures selbst an ABAP nicht vorbei. statt: DATA: lv_vehicle TYPE string. lv_vehicle = 'Mercedes'. ab ABAP 7.4 DATA(lv_vehicle) = 'Mercedes'. (kopiert vom Netz) In dem Artikel sind noch andere echte Gustostückerl. --- Ich bin auch mehr der Fan von Selektion, Sequenz und Iteration - das genügt und der Rest Syntactic Sugar. Delphi kann sich nicht ewig und drei Tage am Schulpascal orientieren. In den 80ern war Assembler notwendig und zum Teil noch interessant. Zu Zeiten als OO aufkam haben die Sprachdetails und deren Aufbau kaum mehr einen interessiert. Heute ca. 25 Jahre nach der Verbreitung von OO interessiert kaum mehr einen woher die Klassen kommen und von welchem Typ sie sind. Diese Entwicklung kann man seit Beginn der Programmierung in Assembler schön nachverfolgen. Bspw: Klammerung in Pascal im Falle der Selektion (IF). Früher: Ist regulärer Ausdruck - ist so. Heute: So a Schas, warum soviele Klammern. Du hast heute eine stärkere Trennung zwischen jenen die ein Class Library bauen (als eigenes Unternehmen). In den 90ern gab es noch Bibliothekare in einer programmierenden IT Organisation, wobei diese Jobs eigentlich aus den U.S. Großprojekten (Regierung) abstammen (1995 ein Projekt mit bis zu 2 Mio. Klassen). Ich kann mich no erinnern an eine Grenze bezüglich der Anzahl von Klassen die eine Klassenbibliothek namens ICLU hat überstiegen und dahinter hatte man schon die liebe Not mit der Verwendung. Ab dem Punkt verschwimmt die Würdigung einstiger Eleganz mit dem Empfinden von 'Bremsklotz'. Beim Delphi hat sich das Thema Inline-Deklaration schon bei den Interfaces und COM angekündigt. Ein handvoll Variablen in der Section vom Typ XYZVariant sind auch nichtssagend. Sobald Sprachen und Umgebungen erlauben eine Mio. Klassen zu handeln kommt das nächste Framework mit 10 Mio :-D. Ich kann mich noch an einen Anruf im Rahmen des Supports erinnern. Liegen die Daten beim Rudi?. Ja, gleich neben seinem COBOL Code. Na dann ist es eh recht. Weit von dem Zustand sind wir bspw. im Umfeld der Webentwicklung nicht mehr. Daten liegen beim Google, gehen wir auf ein Bier. Irgendwie werden wir sie schon bekommen. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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