Public als Parameter

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Public als Parameter

Beitrag von Manfred »

Hi,

wozu gibt man eine Public Variable als Parameter und dann auch noch als Rückgabe an? Das erschließt sich mir nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Public als Parameter

Beitrag von Hans Zethofer »

vielleicht wegen der Lesbarkeit des Programmes ?
oder Sie war Ursprünglich nicht Public und wurde im Laufe der Entwicklung Public
(wurde aber dann nicht aus dem Sourcecode wieder konsequent entfernt)

Es gibt im Laufe eines Programmlebens sicher mehrere solcher Fälle die mehr als unlogisch erscheinen. :confused2:
_____________
lg
Hans
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Public als Parameter

Beitrag von AUGE_OHR »

hi
meinst du so eine Konstruktion

Code: Alles auswählen

MEMVAR A
PROCEDURE MAIN
PUBLIC A := 1
? WasSollDas(a)
? a
WAIT
RETURN

FUNCTION WasSollDas(a)
// als parameter ist A dann LOCAL
 ? a += 10
RETURN a
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Public als Parameter

Beitrag von Manfred »

Ich denke so ist es gemacht worden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Public als Parameter

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Ich denke so ist es gemacht worden.
ok ... und das Resultat ?
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Public als Parameter

Beitrag von Manfred »

Ja wie das Resultat? Keine Ahnung. Mir ist es nur bei der Sichtung des Codes aufgefallen und ich habe mich gefragt, wozu das gut sein soll.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Public als Parameter

Beitrag von Jan »

Ich könnte mir vorstellen, daß das Kollisionen geben könnte. Denn die übergebene Variable ist ja erstmal local. Beschrieben werden soll aber die public. Natürlich wird die geänderte local auch wieder zurückgegeben und landet damit recht sicher wieder in der public. Aber meine Hand dafür ins Feuer legen würde ich nicht unbedingt, das kommt immer darauf an, was in dem aufrufenden Programm sonst noch so passiert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Public als Parameter

Beitrag von UliTs »

Jan hat geschrieben:Ich könnte mir vorstellen, daß das Kollisionen geben könnte. Denn die übergebene Variable ist ja erstmal local. Beschrieben werden soll aber die public. Natürlich wird die geänderte local auch wieder zurückgegeben und landet damit recht sicher wieder in der public. Aber meine Hand dafür ins Feuer legen würde ich nicht unbedingt, das kommt immer darauf an, was in dem aufrufenden Programm sonst noch so passiert.
Jan
Ja, man sollte grundsätzlich nicht mit PUBLIC Variablen arbeiten und wenn doch, dann nur mit wenigen mit einemrleicht zu erkennenden Bezeichnung :) .
Aber wie kommst Du darauf, dass die local wieder in der public landet und was meinst Du damit?
Jimmy hat geschrieben:

Code: Alles auswählen

MEMVAR A
PROCEDURE MAIN
PUBLIC A := 1
? WasSollDas(a)
? a
WAIT
RETURN

FUNCTION WasSollDas(a)
// als parameter ist A dann LOCAL
 ? a += 10
RETURN a
...ok ... und das Resultat ?
Jimmy, wie kommt es, dass Du es nicht selbst herausbekommst :?: 8)
Der Public-Variable A wird zu Beginn 1 zugewiesen und da dieser Wert nie verändert wird, hat die Public-Variable A auch bei Programmende den Wert 1 :D .
Die Funktion WasSollDas(a) hat einen Parameter, der a genannt worden ist. Das bedeutet, dass innerhalb der Funktion auf andere PUBLIC oder PRIVATE Variablen, die ebenfalls a heißen, nicht zugegriffen werden kann und damit diese nicht verändert werden können.
Also wird bei

Code: Alles auswählen

? WasSollDas(a)
2 mal der Wert 11 ausgegeben und bei der Wert 1.

-------

Besonders interessant und chaotisch ist der folgende Fall:

Code: Alles auswählen

Z1 FUNCTION WasSollDas(a)
Z2 // als parameter ist A dann LOCAL
Z3  ? a += 10
Z4  ? WasSollDies( a )
Z5 RETURN a
Z6
Z7 FUNCTION WasSollDies(b)
Z8  ? a := b+100
Z9 RETURN b+9
Dann ist die Public-Variable a wieder in WasSollDies(b) sichtbar und wird dort auch bei Aufruf innerhalb von WasSollDas(a) verändert.
Das Ergebnis ist
  • 11 // Z3
    111 // Z8
    20 // Z4
    11 // Ergebnis von Z5
    111 // Wert von a am Ende des Programms
[/code]und a hat bei Programmende den Wert 111 :lol:

Alles ungetestet und nur im Kopf gerechnet. Also korrigiert mich bei Fehlern :D .

Uli

Edit: habe ein paar Mal im Kopf nachgerechnet und die Ergebnistabelle korrigiert...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Public als Parameter

Beitrag von Jan »

UliTs hat geschrieben:Ja, man sollte grundsätzlich nicht mit PUBLIC Variablen arbeiten und wenn doch, dann nur mit wenigen mit einemrleicht zu erkennenden Bezeichnung :) .
Aber wie kommst Du darauf, dass die local wieder in der public landet und was meinst Du damit?
Uli,

stimmt, eine ordentliche Benamung der Variablen ist immer von Vorteil.

Was ich meinte ist: Es ist nicht sicher, daß die local in die public übernommen wird. In dem zitierten Beispiel wird zwar die local zurückgegeben. Wenn aber im aufrufenden Code kein

Code: Alles auswählen

a := wassolldas(a)
steht, dann wird zwar was zurückgegeben, aber das wird nicht abgefragt. Also wurde in wassolldas() eine local a belegt, dieses a aber nicht verwertet. Hier im Beispiel steht ein

Code: Alles auswählen

wassolldas(a)
, ohne die Zuweisung auf a. Also wird eine local a belegt, aber nicht ausgewertet. Somit könnte die public a unverändert bleiben, egal was da in der aufgerufenen Funktion passiert.

Irgendwie muß ich mal ausprobieren, was da wirklich passiert .... Aber riskant ist diese Vorgehensweise sehr sicher. Und verwirrend sowieso.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten