AGB  ·  Datenschutz  ·  Impressum  







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

10.4 : Warum Inline-Variablen?

Ein Thema von himitsu · begonnen am 27. Mai 2020 · letzter Beitrag vom 2. Feb 2022
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

AW: 10.4 : Warum Inline-Variablen?

  Alt 31. Mai 2020, 18:23
Um nochmal auf den Titel einzugehen:

Ich habe schon länger nicht mehr Delphi programmiert, aber das eigentlich tolle an den inline vars ist doch: Initialisierung bei Deklaration.

Eine Variable mit undefiniertem Inhalt ist doch eigentlich unbrauchbar (bis zur Initialisierung). Dass das jetzt in einer Zeile passieren kann, macht das ganze einfach lesbarer und aufgeräumter.

Und dass der Zugriff darauf nur einer Warnung ist, finde ich auch nur mäßig sinnvoll. Wenn die nicht sicher initialisiert wird, sollte der Code nicht kompilieren. Schluss aus.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.687 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: 10.4 : Warum Inline-Variablen?

  Alt 31. Mai 2020, 18:35
Und dass der Zugriff darauf nur einer Warnung ist, finde ich auch nur mäßig sinnvoll. Wenn die nicht sicher initialisiert wird, sollte der Code nicht kompilieren. Schluss aus.
Wenn der Compiler das auch wirklich immer korrekt erkennen würde ...
Tut er aber nicht, auch wenn das tatsächlich von Version zu Version besser wird.
Thomas Mueller
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#3

AW: 10.4 : Warum Inline-Variablen?

  Alt 1. Jun 2020, 13:40
In den Links, die Harry Stahl angegeben hat, findet sich auch der Hinweis von Stefan Glienke, dass bei einer inline deklarierten Variable die Unit, in der der Typ der Variable deklariert wird, nicht mehr zwingend in der Uses-Angabe aufgeführt sein muss:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  var DateiListe := TDirectory.GetFiles('D:\Temp\', '*.*');
end;
funktioniert auch, wenn System.Types nicht in der Uses-Liste aufgeführt ist.

Aus Sicht eines Hobbyprogrammierers finde ich die Kleinlichkeit, die Konstruktionsmerkmal von Pascal ist, in aller Regel eher hilfreich, weil sie zu einem Mindestmaß an Genauigkeit und Strukturiertheit zwingt.
Ich könnte mir allerdings vorstellen, die var-Liste sozusagen über begin hinaus fortzuführen, um initialisierte Variablen zu bekommen (und würde dabei immer den Typ angeben). Und vielleicht noch bei Schleifen. Ansonsten war die Sache mit dem Gültigkeitsbereich kaum je eine Quelle von Fehlern (da gibt es massenhaft andere Quellen).
  Mit Zitat antworten Zitat
wasbo

Registriert seit: 24. Jan 2022
Ort: Bochum
3 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 10.4 : Warum Inline-Variablen?

  Alt 28. Jan 2022, 19:54
Und dass der Zugriff darauf nur einer Warnung ist, finde ich auch nur mäßig sinnvoll. Wenn die nicht sicher initialisiert wird, sollte der Code nicht kompilieren. Schluss aus.
Wenn der Compiler das auch wirklich immer korrekt erkennen würde ...
Tut er aber nicht, auch wenn das tatsächlich von Version zu Version besser wird.
Der Thread ist ja schon ein wenig älter, aber gibt es ein konkretes Beispiel für dieses Verhalten, Delphi (Objekt-Pascal) ist doch eine typsichere Sprache???

Für die Übersichtlichkeit, ist der Ort der Variablen-Definition eh unbedeutend, eine gute Prozedur oder Funktion sollte nicht länger als 25 Zeilen sein. Ausnahmen bestätigen natürlich die Regel. Aber der Pascal und Oberon Erfinder, Niklas Wirth, rät seinen Studenten, nach 25 Zeilen über eine neue Prozedur nachzudenken.

Die Initialisierung der Inline-Variablen bei der Deklaration ist eine der größten Stärken. Member-Variablen von Objekten sind definiert, auch wenn sie Nil sind. Aber lokale Variablen leider nicht.
Walter Schwägerl
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#5

AW: 10.4 : Warum Inline-Variablen?

  Alt 29. Jan 2022, 20:53
Problem war ja eher, dass man bei der "normalen" Variablendeklaration nur globalen Variablen einen Initialwert mitgeben kann.

Wäre es auch bei Objekt-Feldern und lokalen Variablen möglich (k.A. warum die es nicht hinbekommen),
dann wäre es schon immer so nutzbar gewesen, wie man es jetzt bei den Inline-Variablen auch machen kann.

Ein Fortschritt war ja, dass bei statischen Array-Konstanten nun endlich die Länge automatisch bestimmt werden kann,
auch wenn es schon praktisch ist, dass in der Fehlermeldung steht, was ist und was es sein muß, wenn die Länge nicht stimmt.



Und eine Fehlerquelle weniger, gibt es nun dank Inline endlich auch.
Niemand kommt so mehr auf die Idee nach der For-Schleife auf die Variable zugreifen zu wollen.
for var i := 0 to 100 do oder for var V in ListOrSet do , bzw selber den Typ angeben könnte man, falls man mag
for var i: Integer := 0 to 100 do oder for var V: Irgendwas in ListOrSet do

Und für per $IF/$IFDEF deaktivierbaren Test-/Debug-Code ist es absolut genial.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jan 2022 um 20:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: 10.4 : Warum Inline-Variablen?

  Alt 29. Jan 2022, 23:43
Aber der Pascal und Oberon Erfinder, Niklas Wirth, rät seinen Studenten, nach 25 Zeilen über eine neue Prozedur nachzudenken.
Robert C. Martin empfiehlt 4 - aber für Delphi würde ich das mal auf 6 - 8 erweitern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#7

AW: 10.4 : Warum Inline-Variablen?

  Alt 30. Jan 2022, 00:04
und in der Realität geht es dennoch in die Tausenden/Millionen
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Frickler

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

AW: 10.4 : Warum Inline-Variablen?

  Alt 31. Jan 2022, 10:08
Robert C. Martin empfiehlt 4 - aber für Delphi würde ich das mal auf 6 - 8 erweitern.
Bei 4 Zeilen frage ich mich doch, ob es ein Tool gibt, welches einem den Programmfluss visualisiert, wenn jede Funktion/Methode nur noch aus Aufrufen von anderen Funktionen/Methoden besteht. Denn ich habe solche Quelltexte schon gesehen und mich gefragt, "was macht das eigentlich"?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: 10.4 : Warum Inline-Variablen?

  Alt 31. Jan 2022, 10:36
Bei 4 Zeilen frage ich mich doch, ob es ein Tool gibt, welches einem den Programmfluss visualisiert, wenn jede Funktion/Methode nur noch aus Aufrufen von anderen Funktionen/Methoden besteht. Denn ich habe solche Quelltexte schon gesehen und mich gefragt, "was macht das eigentlich"?
Wenn du dich das fragen musst, dann ist die Namensgebung der aufgerufenen Methoden offenbar nicht ganz so gut wie sie sein sollte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: 10.4 : Warum Inline-Variablen?

  Alt 1. Feb 2022, 13:18
Robert C Martin nutzt auch nen Compiler, der vernünftigt inlined und WPO beherrscht
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz