AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Inline Variablen-Deklaration bei try..except

Inline Variablen-Deklaration bei try..except

Ein Thema von Der schöne Günther · begonnen am 14. Apr 2014 · letzter Beitrag vom 14. Apr 2014
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.167 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 10:20
Delphi-Version: XE5
Als ich das erste mal Delphis eigenen var -Block für lokale Variablen sah musste ich sofort an die alten C-Compiler denken die erst säuberlich ihre Variablen deklariert und dann die Anweisungen haben wollten.

Mittlerweile kann ich sagen, dass das "Fehlen" von inline Deklarationen eins der Dinge ist, die ich in anderen Sprachen am meisten vermisse.

Darum soll es aber nicht gehen: Was hat es eigentlich mit
Delphi-Quellcode:
var
   // Nichts
begin

   try
      // Zeug
   except
      on e: EFileNotFoundException do
         e.Zeugs();
   else
      raise;
   end;
   
end;
auf sich? Natürlich ist es jetzt schön handy, sich hier in einem Abwasch die Variable e zu deklarieren und damit direkt weiterzuarbeiten. Im Gegensatz kann ich noch nicht einmal im var -Block meine Exception-Variable aufführen.

Syntaktisch gesehen eigentlich doch ein Sakrileg, oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 12:44
Ja, ein bissl komisch ist das schon, aber im Prinzip ist das hier nur ein "lokaler" gecasteter Alias für Delphi-Referenz durchsuchenSystem.ExceptObject (aktuelles Exception-Objekt).

Stell es dir als eine Art Makro vor, welches intern die Variablen anlegt, vergleicht und castet.

Delphi-Quellcode:
begin
  try
    // böses Zeug
  except
    on E: EFileNotFoundException do
      E.Kaputt;
    on E: EProgrammerNotFound do
      E.FaulerSack;
    else
      raise;
  end;
end;
Delphi-Quellcode:
begin
  try
    // böses Zeug
  except
    if ExceptObject is EFileNotFoundException then
      EFileNotFoundException(ExceptObject).Kaputt
    else if ExceptObject is EProgrammerNotFound then
      EProgrammerNotFound(ExceptObject).FaulerSack
    else
      raise;
  end;
end;
Delphi-Quellcode:
var
  E: EFileNotFoundException;
  E2: EProgrammerNotFound;
begin
  try
    // böses Zeug
  except
    if ExceptObject is EFileNotFoundException then begin
      E := EFileNotFoundException(ExceptObject);
      E.Kaputt;
    end else if ExceptObject is EProgrammerNotFound then begin
      E2 := EProgrammerNotFound(ExceptObject);
      E2.FaulerSack;
    end else
      raise;
  end;
end;
Delphi legt ja auch so öfters mal "unsichtbare" lokale Variablen an,
sei es bei a := b + c * d , wo das Ergebnis von c*d ja quasi in einer Zwischenvariable landet,
oder der Enumerator einer For-In-Schleife und vorallem beim with .
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Apr 2014 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 13:48
Die Exception-Variable hat außerhalb des spezifischen Catch/Except-Blocks keine Gültigkeit, d.h. der Zugriff bzw. der Inhalt ist undefiniert. Per Definitionem nicht. Man könnte sie auf Nil setzen, aber selbst dann ist nicht klar, was damit gemeint ist.

Mittlerweile kann ich sagen, dass das "Fehlen" von inline Deklarationen eins der Dinge ist, die ich in anderen Sprachen am meisten vermisse.
Verstehe ich nicht. Oder meinst Du mit 'inline Deklarationen' das 'var'? Das kannst Du doch mit C#, Jave usw. genauso machen. Sollst Du zwar nicht, weil es nicht hübsch ist, aber Du kannst.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#4

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 14:38
Mittlerweile kann ich sagen, dass das "Fehlen" von inline Deklarationen eins der Dinge ist, die ich in anderen Sprachen am meisten vermisse.
Verstehe ich nicht.
Soll heißen^^^^^^^^^^Heißt: das "Fehlen" ... vermisse ich am meisten.

Ansonsten

Sollst Du zwar nicht, weil es nicht hübsch ist, aber Du kannst
Ich C# ist es absolut so vorgesehen, dass der Scope jeder lokalen Variablen so klein sein soll, wie nur irgend möglich.

Z.B. Schleifenzähler sollen immer so verwendet werden:

Code:
for (int i = 1;...; i++)
So ist i tatsächlich nur innerhalb der Schleife bekannt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 14:39
Ist uach bei C, C++ und m.W. Java so.
Markus Kinzler
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 15:13
Ich C# ist es absolut so vorgesehen, dass der Scope jeder lokalen Variablen so klein sein soll, wie nur irgend möglich.
Deswegen schrieb ich ja
Sollst Du zwar nicht, weil es nicht hübsch ist, aber Du kannst..
Aber bei for-Schleifenvariablen hast Du recht, da geht das nicht anders. Ansonsten kannst Du ja eine Variable am Anfang der Methode deklarieren, und erst 3000 Zeilen später verwenden. Du wirst zwar geteert und gefedert, aber wenn Du darauf stehst, ist es eine gute Möglichkeit, für lau seiner Obsession zu fröhnen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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