Variable Funktionsparameter

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

David

Betreff: Variable Funktionsparameter

BeitragMo, Jul 26, 2004 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ist es möglich Funktionsparameter variabel zu machen? Also wenn ich Parameter in einer Funktion ändere, so sollen die als Parameter übergebene Variablen auch auserhalb der betreffenden Funktion geändert werden.

grüße
http://bl4ckd0g.funpic.de

Bigmichi

BeitragMo, Jul 26, 2004 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub du meisnt GLobal ? wenn du dein Wert GLobal setzt kannst du von überall deinem Prog auf diese Vab zugreifen =) falls ich dich richtig verstanden habe =)
 

David

BeitragMo, Jul 26, 2004 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nein meinte ich nicht!

Code: [AUSKLAPPEN]

Function Blah( variable )
  variable = 100
end function

;...

x = 200
Print x ;Gibt 200 aus
Blah( x )
Print x ;Soll 100 ausgeben


Deutlicher? So im Prinzip will ich das haben nur klappts eben nicht wie mir aus C++ o.ä. bekannt.

grüße
http://bl4ckd0g.funpic.de

Bigmichi

BeitragMo, Jul 26, 2004 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
achso Very Happy

Code: [AUSKLAPPEN]

Vab = 200

X = bla(Vab)

print X


function bla(DD)

  DD = DD / 2
  return DD

end fucntion



so müsste es gehen Very Happy
 

David

BeitragMo, Jul 26, 2004 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Neieiein, nicht als Rückgabewert.
Das es so geht weis ich schon selbst...

Beispiel:
Code: [AUSKLAPPEN]

var$ = "Hallo Welt"
Print var$ ;alles klar ne?
res$ = Func( var$ )
Print res$; "Hallo"
Print var$; "Welt"

Function Func( variable$ )
  variable = Mid( var, 7, 4 )
  return Mid( variable, 1, 5 )
end function



Hoffe diesmal kams richtig rüber.

grüße
http://bl4ckd0g.funpic.de
 

Dreamora

BeitragMo, Jul 26, 2004 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
David: Dein Beispiel würde auch 200 ausgeben beim 2ten Mal

Um es in der Funktion zu ändern müsstest du den Variablenpointer übergeben ( bzw. ByRef statt ByVal in anderen Sprachen wie C#, Delphi etc ).
Einen solchen gibts in Blitz3D nicht.
Die "einzige" Möglichkeit neben der Verwendung von globalen Variablen ( global ) ist dabei der Rückgabewert, wie bereits geschrieben.

Eine weitere Möglichkeit wären Banks, allerdings wird dann das ganze beträchtlich umständlicher, weil du nicht mehr direkt darauf zugreifen kannst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

David

BeitragMo, Jul 26, 2004 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Danke für die Antwort.
Das und wie es in anderes Sprachen funktioniert ist mir bekannt, allerdings wäre es durchaus praktisch gewesen, wenn es auch in BlitzBasic eine vergleichbar einfache Lösung gäbe.

Übrigens sind die Schlüsselwörter in C# (ref und val) und in Delphi (const und var), in C++ kann man das mit Pointer bzw Referenzen lösen und dein Beispiel war Visual Basic (.NET).

grüße
http://bl4ckd0g.funpic.de
  • Zuletzt bearbeitet von David am Mo, Jul 26, 2004 11:35, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragMo, Jul 26, 2004 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, lügt nicht, es geht!
in BB aber nur Mit Banks!
du erstellst eine Bank (bank=Createbank(4))
und übergibst diese dann an die Function!
Code: [AUSKLAPPEN]
Function Blub(Bank)
;peek und poke wie verrückt
end function

print peekint Bank,0


bidde schön Smile
between angels and insects
 

David

BeitragMo, Jul 26, 2004 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Danke, hat ja Dreamora schonmal erwähnt.
Werds wohl dann so machen. Smile

grüße
http://bl4ckd0g.funpic.de
 

Dreamora

BeitragMo, Jul 26, 2004 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Eben ja, das Peek Poke ist das Problem, weil Blitz die bank net wirklich als speicher verwendet, so dass man es direkt ausgeben könnte wie in jeder anderen "richtigen" Sprache. Aber wenn Blitz das könnte, hätten wir auch Pointer für Variablen wie in PureBasic etc.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jan_

Ehemaliger Admin

BeitragMo, Jul 26, 2004 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, aber Bank ist ein pointer ...

Naja, BB hat viele schwächen.
between angels and insects
 

Dreamora

BeitragMo, Jul 26, 2004 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
nö Bank is kein Pointer, sondern ein Index ( wie alle Objekte etc auch )
Wenn es ein Pointer wäre könntest du mit Bank + X das Xte Byte in der Bank ansprechen.
Das dürfte darum so sein, weil Blitz intern einen GarbageCollector verwendet, welcher durch Pointer ausgehebelt wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragMo, Jul 26, 2004 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht auch mit Types.Code: [AUSKLAPPEN]
Type Integer
  Field Value
End Type

Var.Integer = New Integer
Var\Value = 200
Print Var\Value
Func(Var)
Print Var\Value
WaitKey

Function Func(Var.Integer)
  Var\Value = 200
End Function
 

walski

Ehemaliger Admin

BeitragMo, Jul 26, 2004 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Types sind wohl wirklich eine schöne Lösung.
Aber denkt auch daran, dass solche Seiteneffekte ansich keine besonders schöne Lösung sind!

walski
buh!
 

David

BeitragMo, Jul 26, 2004 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Kommt drauf an, was man machen will.
Ab und zu kommt man nur umständlich um die Lösung herum oder noch unschöner mit globalen Variablen z.B.

grüße
http://bl4ckd0g.funpic.de

Markus2

BeitragMo, Jul 26, 2004 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit Types finde ich besser als Globale Variablen und Banks ...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group