AGB  ·  Datenschutz  ·  Impressum  







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

Neue Sprachfeatures in Delphi?

Ein Thema von Nathan · begonnen am 24. Okt 2018 · letzter Beitrag vom 27. Okt 2018
Antwort Antwort
Seite 1 von 2  1 2      
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:11
Delphi ist am Ende halt doch ein Pascal. Ich sehe daher keinen Zwang, (Un)Möglichkeiten anderer Sprachfamilien hinein panschen zu müssen.
Es muss aber eine gewisse Menge an Delphi-Programmierern gegeben haben, die sich dieses Feature gewünscht haben.

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;

Geändert von Schokohase (25. Okt 2018 um 08:15 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:19
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 begin..end mit
Code:
{}
.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:28
Ein weiteres Feature, dass sich viele wünschen ist die Ersetzung von begin..end mit
Code:
{}
.
Er hat Jehova gesagt. Steinigt ihn!
Ralf Kaiser
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:37
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 begin..end mit
Code:
{}
.
Allerdings unterscheiden sich beide Anforderungen doch erheblich. Die Inlines können nachweislich (s.o.) helfen den Code schlanker und übersichtlicher zu halten. (*)

Diese Ersetzung von begin .. end kann dieses (soweit ich das sehe) nicht liefern.

Darum wurden wohl auch die Inlines realisiert (es gibt einen konkreten Nutzen ohne den alten Code zu brechen) und die {} 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?

Geändert von Schokohase (25. Okt 2018 um 08:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:42
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 08:50
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 10:53
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.
Sehe ich das aber richtig, dass das nicht so geht (wie bei globalen Variablen):
Delphi-Quellcode:
procedure Bla;
var x: integer = 3;
begin
  ...
end;
sondern halt so:
Delphi-Quellcode:
procedure Bla;
begin
  var x: integer := 3;
  ...
end;
...also noch ne neue Süntacks?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.048 Beiträge
 
Delphi 12 Athens
 
#8

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 10:56
...also noch ne neue Süntacks?
Genau darum geht es in diesem Thread ja.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#9

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 11:28
Endlich eine handliche Ablösung für "with":
Statt
Delphi-Quellcode:
var cds: TClientDataSet; qry: TUniQuery;
begin
  cds := Datamodule.cds_Report;
  qry := Datamodule.qry_Sales;
  // ...viel Text...
  cds.FieldByName('bla').AsString := qry.FieldByName('bla').AsString;
schreiben wir jetzt
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
Datamodule.cds_Report.FieldByName('bla').AsString := Datamodule.qry_Sales.FieldByName('bla').AsString; schreiben. Breitbildschirm sei dank. Aber es gibt auch tiefer verschachtelte Fälle, und irgendwann wirds ziemlich unübersichtlich.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Neue Sprachfeatures in Delphi?

  Alt 25. Okt 2018, 11:24
Sehe ich das aber richtig, dass das nicht so geht (wie bei globalen Variablen):
Delphi-Quellcode:
procedure Bla;
var x: integer = 3;
begin
  ...
end;
sondern halt so:
Delphi-Quellcode:
procedure Bla;
begin
  var x: integer := 3;
  ...
end;
...also noch ne neue Süntacks?
Woooha... Ich seh vor meinem geistigen Auge schon sowas:
Delphi-Quellcode:
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;
Bei so viel Scope braucht man bald ein Periscope
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (25. Okt 2018 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11: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