AGB  ·  Datenschutz  ·  Impressum  







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

Funktion ohne Result?

Ein Thema von fkerber · begonnen am 17. Okt 2004 · letzter Beitrag vom 17. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Funktion ohne Result?

  Alt 17. Okt 2004, 12:13
Hi!

Ich habe folgende Funktion:

Delphi-Quellcode:
function DeleteUser(user: String): Boolean;
var
 Identities: TIniFile;
begin
 result:=False; // <--------
 Identities:=TIniFile.Create(ExtractFilePath(paramstr(0))+'\Identities.dat');
 Try
   Identities.EraseSection(user);
   Result:=True;
 Finally
   Identities.Free;
 end;
end;
Die markierte Zeile wird manchmal nicht mitkompiliert (dieser blaue Punkt am Rand fehlt) oder es kommt dann ein Hint im Sinne von ("Der Wert DeleteUser wird nie benutzt").
Ich rufe die Funktion in einer If-Abfrage auf. Wenn jetzt also der Zugriff auf die Ini fehlschlägt dann sollte das Result eigentlich False sein. Nur wie soll das sein, wenn die Zeile gar nicht mitkompiliert wird?
Ich kann die Zeile auch rauslöschen. Da hätte ich jetzt eher ne Warnung wie "Funktionsresult könnte undefiniert sein" erwartet.

Habe ich irgendwo nen Denkfehler?

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 12:33
Also eigentlich denkst du richtig ... denke ich mal


Du könnest ja auch andersrum versuchen - mit Except, das sollte auch gehn:
Delphi-Quellcode:
function DeleteUser(user: String): Boolean;
var
Identities: TIniFile;
begin
Result:=True;
Identities:=TIniFile.Create(ExtractFilePath(paramstr(0))+'\Identities.dat');
Try
   Identities.EraseSection(user);
Except
   Result:=False;
end;
Identities.Free;
end;
Man könnte auch mal die Code-Optimierung (teilweise) abstellen:
Delphi-Quellcode:
...
begin
{$O-} Result:=False; {$O+}
Identities:=TIniFile.Create(ExtractFilePath(paramstr(0))+'\Identities.dat');
...
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 12:35
Hi!

Ja, das geht sicherlich auch, aber es interessiert mich in erster Linie auch, warum das so passiert. Im Prinzip macht der Compiler da ja nen Fehler rein, oder?

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 12:47
Ich denk mal, es ist ein Fehler in der Code-Optimierung ... so wie es aussieht geht die davon aus, das alles zwischen Try und Finally ausgeführt wird.

- Wenn ich Result:=True; (in Try/Finally) wegnehme, dann wird das Result:=False; ja mitkompiliert.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 12:49
Hi!

Ja, aber er kann ja nicht davon ausgehen, dass derTry erfolgreich ausgeführt wird, oder?
Was passiert, wenn nicht?

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 12:52
Ist eindeutig ein Fehler in der Codeoptimierung, den bei Try-Except functionierts ja (zumindest als ich das benutzt hab)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 13:00
Na dann scheuchen wir mal die Daniels auf ... die haben doch so gute Beziehungen zu Borland ... dann sollte der Fehler ja bis nächste Woche behoben sein
$2B or not $2B
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 13:01
Moin Frederic,

Zitat von fkerber:
Im Prinzip macht der Compiler da ja nen Fehler rein, oder?
eigentlich nicht.

Der Try-Abschnitt wird, bei normalem Programmablauf, immer durchlaufen, und somit Result dort gesetzt.
Es spielt hierbei auch keine Rolle, ob es sich nun um einen Try/Finally oder einen Try/Except Block handelt.

Da Result nur im Fehlerfalle auf false stehen soll, müsstest Du es so machen, wie Himitsu es vorgeschlagen hat.
Ich würde hier allerdings auch noch einen try/finally Block ergänzen, damit auch im Falle eines Fehlers das Inifile-Objekt wieder freigegeben wird.

Delphi-Quellcode:
function DeleteUser(user: String): Boolean;

var
  Identities: TIniFile;

begin
  Result:=True;
  Identities:=TIniFile.Create(ExtractFilePath(paramstr(0))+'\Identities.dat');
  try
    Try
      Identities.EraseSection(user);
    Except
      Result:=False;
    end;
  finally
    Identities.Free;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#9

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 13:01
Hi!

Das ist dann schlecht
Dann muss ich wohl umbauen.

ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#10

Re: Funktion ohne Result?

  Alt 17. Okt 2004, 13:03
Hi!

@Sakura:
Ich dachte der Try-Block wird verlassen, wenn das Erase fehlschlägt. Ist das nicht der Fall?

Ciao Frederic
Frederic Kerber
  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 10:14 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