AW: 10.4 : Warum Inline-Variablen?
Zitat:
Statt
Delphi-Quellcode:
var files := System.ioutils.TDirectory.GetFiles (edDir.Text, '*.*');
kanst Du auch
Delphi-Quellcode:
var files : TStringDynArray := System.ioutils.TDirectory.GetFiles (edDir.Text, '*.*');
schreiben... |
AW: 10.4 : Warum Inline-Variablen?
Zitat:
Wenn ich mir eine Funktion ansehe, die ein anderer geschrieben hat (oder ich selber vor längerer Zeit) und sich da im Var-Bereich 5-10 Variablen-Deklarationen tummeln, weiß ich dann noch, wenn ich mir 50 Zeilen code durchgelesen habe, welchen Typ eine Variable hat, wenn sie zum ersten mal zum Einsatz kommt? Per inline var kommt der Typ der Variable ins Spiel, wenn ich an der Stelle bin, wo die Variable gebraucht wird. Wenn die Variablenbezeichnung (z.B. sInitName) schon selbst den Typ erklärt, reicht ein
Delphi-Quellcode:
var sInitName := 'MusterMann';
Hab ich was komplexeres oder mehrdeutiges, dann nehme ich da noch den Typ hinzu:
Delphi-Quellcode:
var MyStdPowerSrc : TBattery := GetPower (PowerSrc);
// statt: MyStdPowerSrc := GetPower (PowerSrc); Ich weiß dann genau an der Stelle wo die Variable zum Einsatz kommt, dass MyStdPowerSrc eben von der Klasse TBattery ist und muss nicht 40 Zeilen weiter oben nachsehen, ob MyStdPowerSrc nun TBattery oder TSolarPanel war, das noch an anderer Stelle in der Funktion in einem else-Zweig zum Einsatz kommt... Aber so richtig hast Du ja noch gar nicht erklärt, warum Du der Meinung bist, dass die Lesbarkeit schlechter ist ... |
AW: 10.4 : Warum Inline-Variablen?
Zitat:
Alternativ arbeitest du besser mit einem 21:9 Monitor im Hochformat und bekommst dann auch wieder die Funktion in einem Blick auf den Bildschirm. oder besser gleich 16:3 :stupid: https://www.itboost.de//eshop.php?ac...r_aid=10949605 |
AW: 10.4 : Warum Inline-Variablen?
Zitat:
Als 10.3 rauskam habe ich ein Refactoring eines alten Services gemacht, der mit der Zeit aus dem Ruder lief. Das wollte ich dann auch gleich zusammen mit TMS Aurelius und einer neuen Modul-Factory, die ich mir überlegt hatte, machen. Da wollte ich natürlich auch gleich Inline Variablen ausprobieren. Erste Versuche sahen gut aus. Aber als dann alles so halbwegs zusammengebaut war, gab es seltsame Effekte, Schutzverletzungen, die da nicht sein sollten. Ich habe Tage gesucht. Irgendwann habe ich in einem der Module, wo ich ständig Fehler hatte, dann doch alle Inline Variablen rausgeworfen. Siehe da, es funcktionierte, wie es sollte. Nachdem ich alle Inlines im ganzen Projekt rausgeworfen habe, traten keine Fehler mehr auf. Vielleicht ist es ja besser seitdem, aber ich nutze dieses Feature mit Vorsicht. |
AW: 10.4 : Warum Inline-Variablen?
Zitat:
|
AW: 10.4 : Warum Inline-Variablen?
Wo ich das gerade sehe, wer hat mit Inline schon was getestet ?
Kann die Inline-Variable in einem Scope auch umdeklariert werden, vielleicht so ? Ich würde erwarten das es geht, aber die Erfahrung lehrt mich ...
Delphi-Quellcode:
Ich vermute mal das es nicht geht, weil dann verschachtelte Prozeduren damit nicht klarkommen.
var MyStdPowerSrc := TBattery.Create;
MyStdPowerSrc.Free ... var MyStdPowerSrc := TSolarPanel.Create; //wird hier der Typ TBattery gg. TSolarPanel getauscht ? MyStdPowerSrc.Free |
AW: 10.4 : Warum Inline-Variablen?
Ein schönes praktisches Beispiel wie man sich selbst ins Knie schießen kann hat Microsoft kürzlich erzählt. Ein uralter Bug in FAT32 lag im Endeffekt auch an einer unglücklich platzierten Deklaration einer Variable:
(Runterscrollen zu "Use-After-Free in FAT32") https://msrc-blog.microsoft.com/2020...ry-on-windows/ Zitat:
|
AW: 10.4 : Warum Inline-Variablen?
|
AW: 10.4 : Warum Inline-Variablen?
Zitat:
|
AW: 10.4 : Warum Inline-Variablen?
Zitat:
Delphi-Quellcode:
Delphi würde Dir in dem oben beschriebenen C-Beispiel mit INLINE-Var eine Warnung ausgeben, dass tmp möglicherweise nicht initialisiert sei (so was wie ein "InitAll" gibts unter Delphi nicht).
var
tmp: Integer; begin for L := 1 to 10 do begin // tmp := 0; <-- Oder so was inc (tmp); DoStuff (L, tmp); end; Im meinem Fehler-Beispiel erhältst Du auch eine Warnung wegen der fehlenden Initialisierung (es sei denn Du initialisierst in der Schleife, dann nicht). Aber ich sag mal: Jeder so wie er meint. Ich freue mich jedenfalls die zusätzliche Option zu haben und werde Sie auch nutzen, die Artikel in den Links, die ich oben genannt habe, führen ja auch sehr gute Gründe für eine Verwendung auf. Wer es nicht mag, lässt es einfach... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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