Autor Beitrag
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 13.05.17 20:30 
Hallo Forum

Problemstellung:
Bei manchen Funktionen gibt es var Parameter, die man nicht unbedingt braucht, jedoch müssen sie belegt werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Beispiel(s: stringvar i: Integer; var p: PChar): Boolean;

// Aufruf
var
  i: Integer;
  p: PChar;
begin
  if Beispiel('Text', i, p) then
  // usw.
end;

Lazarus weist darauf hin (Hint), dass die Variablen i und p nicht benutzt werden.
Man könnte an der Stelle den Hinweis deaktivieren: {$HINTS OFF}
Will ich aber nicht unbedingt, daher meine Frage, was ich beim Aufrufen an jenen Stellen sonst setzen könnte, damit Lazarus zufrieden ist?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Chefentwickler
Beiträge: 20314
Erhaltene Danke: 2104

Win 10
C# (VS 2017)
BeitragVerfasst: Sa 13.05.17 20:47 
Wenn Du die Funktion mit denselben Werten aufrufen willst, wie wenn Du die Variablen gar nicht zugewiesen hast, sollte sowas richtig sein.
ausblenden Delphi-Quelltext
1:
2:
i := Default(Integer);
p := Default(PChar);

Ansonsten hängt von der Funktion "Beispiel" ab, welche Werte im Aufruf Sinn machen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 13.05.17 23:18 
Default auf die Weise zu nutzen, ist mir neu, und Lazarus wohl auch:
ausblenden Quelltext
1:
Error: Identifier not found "Default"					

Ich kenn's auch nur von Eigenschaften, wie:
ausblenden Delphi-Quelltext
1:
property Zaehler: Integer read FZeahler write FZeahler default 1;					

Ich konkretisiere das Beispiel ein wenig, damit wir nicht aneinander vorbei "schreiben":
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function Beispiel(s: stringvar i: Integer):Boolean;
begin
  i := Length(s);
  result := i > 0;
end

// Aufruf
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  //i := 0;  
  if Beispiel('Text', i) then
    ShowMessage('Passt'else
    ShowMessage('Passt nicht');
end;

In der Form hat einzig Lazarus etwas auszusetzen. Ich könnte die auskommentierte Zeile aufheben, dann hätte ich das Problem schonmal nicht.
Wenn ich aber auf die Zeile verzichten will bzw. auf die Variable i an sich, was könnte ich dem var Parameter sonst noch mitgeben: if Beispiel('Text'?then ...

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 400
Erhaltene Danke: 93

Win 7
D6 Prof, XE2 Prof
BeitragVerfasst: Sa 13.05.17 23:28 
ich verstehe das Problem im Augenblick nicht,
vielleicht übersehe ich ja was.

Ich halte fest:
Im konkretisierten Beispiel (Lazarus) erfolgt kein Warnhinweis wenn "i:=0" nicht auskommentiert ist,
wenn die Auskommentierung da ist erfolgt Hinweis daß i nicht verwendet wird?

Da hat Lazarus aber doch recht finde ich.

Mit Auskommentierung ist i beim Aufruf der Prozedur "beispiel" undefiniert. Das stört ja nicht.
Ob "beispiel" nun den Wert von i ändert oder nicht ist unerheblich, da ja nach dem Aufruf von "beispiel"
auf das i nicht zugegriffen wird.
Also ist i nicht verwendet hier. -> da hat Lazarus doch korrekt gemeckert oder?

Wenn Du die Auskommentierung wegläßt gibt es andererseits keine Warnung mehr, denn
i wird ja verwendet nachdem der Wert 0 zugewiesen wurde: Und zwar als Parameter welcher
"Beispiel" mitgegeben wird.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18694
Erhaltene Danke: 1620

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.05.17 23:35 
Ich finde das in diesem Fall sehr einfach. Wenn die Parameter nicht immer benötigt werden, dann kannst du doch einfach eine overloaded Methode erstellen, in der die Parameter nicht vorhanden sind. Das hat den Vorteil, dass du die Variablen auch gar nicht erst lokal deklarieren musst um die Funktion aufzurufen.

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 13.05.17 23:43 
Genau so ist es und Lazarus handelt auch richtig. Das Beispiel ist ein Schema, welches an 40+ Stellen vorkommt und entsprechend viele Hinweise von sich gibt. Ich suche nach einer Möglichkeit, auf die Variablen zu verzichten, sofern es möglich ist.
user profile iconjaenicke's Idee find' ich schonmal gut, würde mir auch zusagen. Abschließend: Ginge es überhaupt, dass man dem var Parameter etwas mitgibt, ohne eine Variable dafür zu verwenden?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18694
Erhaltene Danke: 1620

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.05.17 00:16 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ginge es überhaupt, dass man dem var Parameter etwas mitgibt, ohne eine Variable dafür zu verwenden?
Nein, das meinte ich ja mit der lokalen Variable, die nur durch eine Überladung nicht zum Aufruf benötigt wird.

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 14.05.17 00:23 
Danke, das reicht mir als Antwort.

Das Thema hat sich erledigt !!!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)