AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Boolean var-Parameter in Prozedur mit Vorgabewert?
Thema durchsuchen
Ansicht
Themen-Optionen

Boolean var-Parameter in Prozedur mit Vorgabewert?

Ein Thema von Glados · begonnen am 24. Jul 2017 · letzter Beitrag vom 24. Jul 2017
Antwort Antwort
Seite 1 von 2  1 2      
Glados
(Gast)

n/a Beiträge
 
#1

Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:30
Delphi-Version: 10 Berlin
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.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:34
Kurze Antwort: Nein.

Führe eine Überladung ein welche den Parameter dann halt nicht hat. Ansonsten gibt es keine Alternative.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:34
Einfach mit einem Default-Wert belegen sollte ausreichen:
procedure TestProc(a: string; var x: Boolean = True); Kann aber sein, dass das bei Var-Parametern nicht funktioniert. Habe ich noch nicht getestet
Peter
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#4

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:35
Ok Fall somit erledigt. Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:38
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.
Peter
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#6

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 08:57
Einfach mit einem Default-Wert belegen sollte ausreichen:
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Jul 2017 um 09:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 09:21
@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.
Peter
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#9

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 09:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Boolean var-Parameter in Prozedur mit Vorgabewert?

  Alt 24. Jul 2017, 09:32
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 08:31 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