Delphi-PRAXiS
Seite 1 von 9  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Das with-Statement in XE4 (https://www.delphipraxis.net/174414-das-statement-xe4.html)

Codehunter 22. Apr 2013 08:04

Das with-Statement in XE4
 
Ich zitiere jetzt mal aus dem inzwischen geschlossenen Thread:
Zitat:

Zitat von Insider2004 (Beitrag 1212275)
Ausserdem ist das with-Statement auch nicht mehr gerne gesehen.

Wie bitte? Was soll denn dann verwendet werden? Alles wieder lang ausschreiben? Na schönen Schrank auch! Wenn ich mir z.B. die TMS-Komponenten anschaue... Gigantische TPersistent-Kaskaden. Soll so die Zukunft aussehen:
Delphi-Quellcode:
FormComponent.Property1.SubProperty2.SubProperty3.BoolValue:= xyz;
FormComponent.Property1.SubProperty2.SubProperty3.IntValue:= 123;
FormComponent.Property1.SubProperty2.SubProperty3.StringValue:= 'xyz';
Statt so:
Delphi-Quellcode:
with FormComponent.Property1.SubProperty2.SubProperty3 do
begin
  BoolValue:= xyz;
  IntValue:= 123;
  StringValue:= 'xyz';
end;
Oder
Delphi-Quellcode:
var
  fFForm: TForm;
begin
  fForm:= TForm.Create;
  try
    fForm.AnyThing:= Foo;
    fForm.OtherThing:= Bar;
  finally
   fForm.Free;
  end;
end;
Statt
Delphi-Quellcode:
with TForm.Create do try
  AnyThing:= Foo;
  OtherThing:= Bar;
finally
  Free;
end;
WTF?

uligerhardt 22. Apr 2013 08:07

AW: Das with-Statement in XE4
 
Ich sag mal: mit einer Variablen, wie in deinem zweiten Beispiel. Das erste finde ich, gelinde gesagt, sch*****. :mrgreen:
Und wirklich überraschend kommt der Move ja auch nicht.

Phoenix 22. Apr 2013 08:11

AW: Das with-Statement in XE4
 
Nein, das erwartet keiner.
Das Problem mit with ist, dass es Scopes verschleiert.

Was ist, wenn Du in einem With-Block, den Wert von Tag des aktuellen Forms auf Sub-Controls schreiben willst? Bam-Scope-Konflikt.

Delphi-Quellcode:
with FormComponent.Property1.SubProperty2.SubProperty3 do
begin
  BoolValue:= self.BoolValue;
  IntValue:= self.IntValue;
  StringValue:= self.StringValue;
end;

// wird dann zu
var myObject: TypeOfSubProperty3;

//...

myObject := FormComponent.Property1.SubProperty2.SubProperty3;
myObject.BoolValue:= BoolValue;
myObject.IntValue:= IntValue;
myObject.StringValue:= StringValue;
Letzlich sparst Du Dir damit sogar noch eine Zeile ;-)

DeddyH 22. Apr 2013 08:12

AW: Das with-Statement in XE4
 
Eben. Eine kleine Variable erspart die Tipparbeit, und übersichtlicher als with ist es auch noch.
Delphi-Quellcode:
var
  MyRecord: TSomeRecord;
begin
  MyRecord := SomeClass.SomeListClass[0].SomeSubClass.RecordProp;
  MyRecord.SomeInt := 42;
  MyRecord.SomeString := 'Wuppdi';
[edit] 2 L8 :( [/edit]

Bernhard Geyer 22. Apr 2013 08:21

AW: Das with-Statement in XE4
 
Zitat:

Zitat von DeddyH (Beitrag 1212293)
Eben. Eine kleine Variable erspart die Tipparbeit, und übersichtlicher als with ist es auch noch.

:thumb:


Und der Scope-Konflikt hat uns schon einige Tage Fehlersuche gekostet :wall:
Mittlerweile bauen wir es überall aus wenn wir eh was an der entsprechenden stelle ändern müssen.

dataspider 22. Apr 2013 08:23

AW: Das with-Statement in XE4
 
Und einen Ausdruck anzeigen im Debugger wird dann auch zur Freude...

Frank

Uwe Raabe 22. Apr 2013 08:42

AW: Das with-Statement in XE4
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1212295)
Und der Scope-Konflikt hat uns schon einige Tage Fehlersuche gekostet :wall:

Vor allen Dingen, wenn das durch Einführungen eines properties Width in TRect mal eben so mit einem Delphi-Update rein rutscht und Code, der vorher problemlos lief, plötzlich nur noch Müll produziert.

Bernhard Geyer 22. Apr 2013 08:44

AW: Das with-Statement in XE4
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1212298)
Vor allen Dingen, wenn das durch Einführungen eines properties Width in TRect mal eben so mit einem Delphi-Update rein rutscht und Code, der vorher problemlos lief, plötzlich nur noch Müll produziert.

Genau. Hier liegt der Fehler an der Sprachdefinition. Hätte man es wie bei VB gemacht mit einem Punkt davor wäre alles klar gewesen.

Mavarik 22. Apr 2013 08:49

AW: Das with-Statement in XE4
 
Ohne with ist voll daneben...

Besonders beim Zugriff auf XML Dateien über ein Interface...

Aktuelles Beispiel
Delphi-Quellcode:
GrundDaten.Verfahrensdaten.Beteiligung.Beteiligter.Organisation.Registereintragung.Items[0].Inlaendisches_Registergericht.Registergericht_Ort.Content := 'Bonn'


Ohne With kann man das nicht mehr lesen oder mit arbeiten...
Und jedesmal ne Variable vom entsprechenden Untertypen definieren?

Schlechte wahl...

Mavarik

jaenicke 22. Apr 2013 08:52

AW: Das with-Statement in XE4
 
Zudem gibt es immer wieder Probleme, weil Code nicht mehr kompilierbar ist. Ein Beispiel ist die Einführung von zusätzlichen Features in TRect. Dort gibt es ja nun Offset, was aber leider in der VirtualStringTree genau innerhalb eines with benutzt wurde. Und schon war nur deswegen der Code nicht mehr kompilierbar.

Andere Punkte wurden ja schon genannt, wie der dass ein einfaches Debuggen so gut wie unmöglich wird, da man für jede einzelne Auswertung einer Variablen diese komplett in den Auswerten-Dialog schreiben bzw. kopieren muss (zusammen mit dem Anteil in with).

Das Zwei-Augen Prinzip beim Einchecken wird auch zur Farce, weil dabei niemand den Überblick wahren kann, wenn überall with steht. Da bleibt daher immer ein Unsicherheitsfaktor.
Welche Eigenschaften wo existieren, kann niemand immer auswendig wissen, zumal sich dies auch durch neue Features in der RTL ändert.

Davon abgesehen macht with in meinen Augen auch keinen Sinn. Der einzige "Vorteil" ist, dass man vielleicht etwas weniger tippen muss. Aber als Entwickler darf man ja nun wirklich nicht tippfaul sein, viel tippen gehört schließlich dazu...:shock:
Der riesige Zeit- und damit Kostenaufwand, der dann aber folgt, weil der Code schlechter zu warten ist, ist damit jedenfalls gar nicht vergleichbar. Ein Musterbeispiel für eine Milchmädchenrechnung.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1212295)
Mittlerweile bauen wir es überall aus wenn wir eh was an der entsprechenden stelle ändern müssen.

Wir auch...

Ich selbst habe es auch nie wirklich viel benutzt. Gut, am Anfang als ich noch nicht beruflich entwickelt habe, da habe ich über die Folgen nicht so sehr nachgedacht und es kam schon mal in meinen Quelltexten vor, aber nur selten.

Zitat:

Zitat von Mavarik (Beitrag 1212301)
Und jedesmal ne Variable vom entsprechenden Untertypen definieren?

Das ist allemal besser als with.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.
Seite 1 von 9  1 23     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