Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Boolean var-Parameter in Prozedur mit Vorgabewert? (https://www.delphipraxis.net/193386-boolean-var-parameter-prozedur-mit-vorgabewert.html)

Glados 24. Jul 2017 08:30

Delphi-Version: 10 Berlin

Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Delphi-Quellcode:
// global
var
 BoolVar: Boolean;

procedure TestProc(a: string; var x: Boolean);
begin
 x := True;
 .....
 x := False;
end;

TestProc('abc', BoolVar); // #1
TestProc('abc'); // #2
Ist es irgendwie möglich Fall #2 dazu zu bewegen sich kompilieren zu lassen?

Ich möchte den Code etwas kürzer gestalten und nicht um jedes TestProc BoolVar := True und False schreiben. Deswegen dachte ich gebe ich das der Funktion bei Bedarf einfach mit.
Manchmal brauche ich diese Variable aber gar nicht.

Der schöne Günther 24. Jul 2017 08:34

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Kurze Antwort: Nein.

Führe eine Überladung ein welche den Parameter dann halt nicht hat. Ansonsten gibt es keine Alternative.

Jasocul 24. Jul 2017 08:34

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Einfach mit einem Default-Wert belegen sollte ausreichen:
Delphi-Quellcode:
procedure TestProc(a: string; var x: Boolean = True);
Kann aber sein, dass das bei Var-Parametern nicht funktioniert. Habe ich noch nicht getestet

Glados 24. Jul 2017 08:35

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Ok Fall somit erledigt. Danke.

Jasocul 24. Jul 2017 08:38

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Ich sehe gerade, dass du nur einen Rückgabewert hast.
Dann kannst du doch auch eine Function davon machen. Dann benötigst du auch keinen Var-Parameter und kannst ganz sicher mit Default-Parametern hantieren.

Glados 24. Jul 2017 08:55

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Zitat:

Dann kannst du doch auch eine Function davon machen. Dann benötigst du auch keinen Var-Parameter und kannst ganz sicher mit Default-Parametern hantieren.
Es ist weniger ein Rückgabewert.

Bevor TestProc aufgerufen wird, soll die Variable auf True gestellt werden. Ist die Arbeit getan auf False.

Das hat den Hintergrund, dass ich den Wert dieser Variable an anderen Stellen abfrage. Ist der Wert zum Zeitpunkt der Abfrage auf True weiß ich, dass die Arbeit noch nicht getan ist.
Genau genommen handelt es sich hier um den FadeIn/Out-Effect eines TForms.

Nur zur Veranschaulichung wie es vorher war
Delphi-Quellcode:
// global
var
 BoolVar: Boolean;

procedure TestProc(a: string; var x: Boolean);
begin
 .....
end;

BoolVar := True; // <==
TestProc('abc');
BoolVar:= False: // <==
Die markierten Stellen möchte ich nur ungerne dutzende Male schreiben müssen. Daher der Umweg mit dem var-Parameter.

himitsu 24. Jul 2017 08:57

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Zitat:

Zitat von Jasocul (Beitrag 1377321)
Einfach mit einem Default-Wert belegen sollte ausreichen:
Delphi-Quellcode:
procedure TestProc(a: string; var x: Boolean = True);
Kann aber sein, dass das bei Var-Parametern nicht funktioniert. Habe ich noch nicht getestet

Wie sollte es denn funktionieren?
Wenn es die externe Variable nicht gibt, dann kann sie auch keinen Wert haben.

Lösung siehe #2.
Die andere Alternative wäre ein Pointer, statt einem Var, aber so schön ist das nicht unbedingt.


Delphi-Quellcode:
procedure TestProc(a: string; x: PBoolean=nil);
var
  y: Boolean;
begin
  if not Assigned(x) then
    x := @y;
  x^ := True;
  .....
  x^ := False;
end;
oder
Delphi-Quellcode:
procedure TestProc(a: string; x: PBoolean=nil);
begin
  if Assigned(x) then
    x^ := True;
  .....
  if Assigned(x) then
    x^ := False;
end;

Jasocul 24. Jul 2017 09:21

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
@himitsu:
Du hast natürlich Recht. Als Var-Parameter kann das nicht funktionieren.

@Glados:
Wenn du keinen Rückgabewert benötigst, dann kannst du das doch als "normalen" Parameter übergeben. Dann funktioniert es auch mit einem Default-Wert und du musst ihn beim Prozedur-Aufruf nicht mehr zwingend übergeben.

Glados 24. Jul 2017 09:26

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Zitat:

Wenn du keinen Rückgabewert benötigst...
Den benötige ich in der Tat nicht.

Aber würde dann die globale Variable auch in TestProc neu gesetzt werden?

jaenicke 24. Jul 2017 09:32

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
In deinem konkreten Fall würde ich eher einen Parameter vom Typ TEvent vorschlagen. Dessen Status kannst du setzen, auch aus Threads abfragen und mit WaitForSingleObject usw. auch darauf warten usw.

Jasocul 24. Jul 2017 09:35

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Wenn du die Prozedur zum Beispiel so änderst:
Delphi-Quellcode:
var
  BoolVar: Boolean;

procedure TestProc(a: string; x: Boolean = True);
begin
  BoolVar := x;
  .....
  BoolVar := not x;
end;
Hängt aber auch von deiner genauen Zielsetzung ab, die ich nicht bis ins letzte Detail kenne.

bra 24. Jul 2017 09:45

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Statt diesem ganzen unübersichtlichem Gepopel einfach eine zweite Prozedur anlegen, die nur einen Parameter hat und Prozedur mit Boolean ruft die ohne auf. Fertig.

Delphi-Quellcode:

procedure TestProc(a: string); overload;
begin
  .....
end;

procedure TestProc(a: string; var x: Boolean); overload;
begin
  x := True;
  TestProc(a);
  x := False;
end;

Glados 24. Jul 2017 09:52

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Daran habe ich auch schon gedacht. bzw an einen globalen Enum.
Aber aktuell ist es so, dass ich mehrere Variablen aus mehreren Formularen habe die ich übergeben kann.

p80286 24. Jul 2017 12:42

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Zitat:

Zitat von Glados (Beitrag 1377340)
Aber aktuell ist es so, dass ich mehrere Variablen aus mehreren Formularen habe die ich übergeben kann.

das klingt für mich jetzt so, daß Du daran gehen solltest Dein Konzept zu überdenken.
Vor allem ältere Programme neigen dazu, solch undurchsichtigen Konstrukte zu beherbergen, einfach weil man ganz schnell nur eine Kleinigkeit geändert haben will.
Wenn dann noch (Form)globale Variablen im Spiel sind werde ich immer ganz mißtrauisch.

Gruß
K-H

Glados 24. Jul 2017 14:23

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?
 
Zitat:

Wenn dann noch (Form)globale Variablen im Spiel sind werde ich immer ganz mißtrauisch.
Es sind Records in den Formularen. Ich greife nicht auf die Form-Variable zu.

Zitat:

das klingt für mich jetzt so, daß Du daran gehen solltest Dein Konzept zu überdenken.
Ich überlege mir mal was.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz