Call Funktion() - Return ?

waswiewo

Erfahrenes Mitglied
Hi Leute,

eine kleine Verständnisfrage:

Wenn ich einer Funktion ...

Code:
Public Function Rechnung(ByVal name As String, ByVal h As Integer, ByVal l As Integer, ByVal a As String, ByVal pkt As Integer, ByVal w As Integer)

... Variabeln übergebe, z.B. so:

Code:
Call Rechnung(namesp1, h, l, a, pkt, w)

Dann funktioniert alles wunderbar. Nur wie bekomme ich diese Werte jetzt zurück? Durch Return? Aber wie?

Muss ich dann ...

Code:
IrgendEineVariabel = Call Rechnung(namesp1, h, l, a, pkt, w)

... nehmen, oder in der Funktion ...

Code:
Return a
Return h
Return l

... oder ...

Code:
Return(a & h & l)

... angeben?

Mit einer einzelnen Variabel mach ich das wie oben ( variabel = Call Funktion(...) ), doch wie gehts mit mehreren?

Ich wollte dies nur wissen, da ich für 2 Textboxen immer im Wechsel genau die selben Operationen ausführe und diese nun in ein Modul auslagern möchte, um Schreibarbeit und Dateigröße zu sparen.
 
Zuletzt bearbeitet:
Mehrere Variablen kannst du nicht zurückgeben lassen. Entweder du verwendest eine Klasse, die die einzelnen Werte als Eigenschaften beinhaltet, oder du kennzeichnest die Variablen mit "ByRef", sodass sie als Referenz übergeben werden. Dann kannst du ihren Inhalt in der Funktion verändern.

Woher kommt überhaupt das "Call"? Lass das weg, das ist vielleicht VB6, aber nicht VB.Net.
Überhaupt klingt dein Problem für mich so, als würdest du nicht objektorientiert programmieren... Kannst du das mal genauer erklären?
 
Hi, danke schon einmal für deine Hilfe!

Nee, Objektorientiert programmiere ich derzeit (noch) nicht. Das Call hab ich weg gemacht, keine Ahnung warum ich es hingeschrieben hab, funktioniert hat es aber^^

Also, was ich gemacht habe - was auch funktionierte: Ein kleines Spiel, mit 2 Spielern. Für jeden Spieler gibt's eine Textbox, in der eine Zahl, die geworfen wurde, eingegeben wird. Durch ENTER wird diese dann übernommen und für Rechnungen wie: Durchschnitt, Kleinster/ größter Wert im Spielverlauf, letzten 6 Werte, usw.

Und da ja für jeden Spieler die Werte gespeichert werden und nach der Berechnung in verschiedenen Labeln wiedergegeben werden, habe ich es bislang in 2 Subs gemacht:

Code:
Private Sub TextBox1_KeyPress(...)

(...)

End Sub

Code:
Private Sub TextBox2_KeyPress(...)

(...)

End Sub

Den Teil der Berechnung möchte ich nun zusammenlegen, dafür übergebe ich der Funktion Variablen und möchte diese dann Weiter nutzen. Ich werde dann wohl für jede Berechnung eine Funktion schreiben, oder die Möglichkeit mit dem "ByRef" nehmen müssen.


############ EDIT #############

Mit dem "ByRef" funktioniert es genau so, wie ich es brauche! Danke für den Hinweis!!
 
Zuletzt bearbeitet:
Bitte. :)
Besser wäre es, wenn du gleich "richtig" einsteigen würdest. Es kann zwar eigentlich nicht schaden zu wissen, wie man funktional programmiert, aber die Sprache ist eigentlich nicht unbedingt dafür gedacht. Erstell eine Klasse Spieler, in der du deine ganze Berechnung durchführst und pass vor allem auf, dass du die Darstellung deiner Ergebnisse im Fenster und die Logik strikt trennst!
 
Ja =)

Bisher hab ich immer einfach alles zusammen und hintereinander geballert.

Ich werde deinen Tipps nachgehen und mich in den nächsten tagen/ Wochen mal so langsam in Richtung Objektorientierung und Klassen begeben.

Wie trennt man die Logik vom Rest? So wie bei PHP in verschiedenen Dateien und dann per include() in einer Datei zusammenbasteln, oder wie? Oder erst die Logik runterrattern und danach die Werte an die Label übergeben?
 
Du hast ja für jedes Fenster, das du erstellst, eine Klasse, die die ganzen Event Handler beinhaltet. Du kannst die Sachen beispielsweise zuerst mal so trennen, dass du in dieser Fensterklasse Methoden aus den Logik-Klassen aufrufst und Anweisungen hast, die die Anzeige aktualisieren. Allerdings darfst du in den Logik-Klassen keine Anweisungen haben, die auf die Benutzeroberfläche zugreifen!
So kannst du die Logik wiederverwenden, auch wenn du eine komplett andere Oberfläche hast, z. B. wenn du eine Konsolenanwendung schreiben willst, oder eine Anwendung für ein Smartphone. Verstehst du wie ich mein?
Wenn du wirklich aus der Logik heraus mit der Oberfläche kommunizieren musst, dann benutzt du Events und Delegates...
 
Okaychen, damit weiß ich bislang noch nicht viel anzufangen, ABER ich weiß nun, was ich mir aneignen muss/ sollte =)

Danke!
 
Zurück