Rückgabewert einer Sub
Moderator: Moderatoren
-
- **
- Beiträge: 29
- Registriert: Mo, 08.11.2010 20:25
Rückgabewert einer Sub
ich will inerhalb einer Sub eine andere Sub aufrufen ( mit oder ohne CALL) und das Ergebnis dieser Sub als Rückgabewert weiter verwenden:
z.B.
sub Arbeit
....,
(Call) sub rechnen (x,y)
z = x + y
end sub
REM...z sollte jetzt in sub Arbeit verfügbar sein
ergebnis = z *15
end sub
das klappt aber nicht. Aber wie?
Max
z.B.
sub Arbeit
....,
(Call) sub rechnen (x,y)
z = x + y
end sub
REM...z sollte jetzt in sub Arbeit verfügbar sein
ergebnis = z *15
end sub
das klappt aber nicht. Aber wie?
Max
Re: Rückgabewert einer Sub
Was du beschreibst, ist nicht das Verhalten einer Sub, sondern das einer Function.
Gruß
lorbass
Gruß
lorbass
Re: Rückgabewert einer Sub
Code: Alles auswählen
Sub Arbeit()
ergebnis = rechnen(3, 4) * 15
Msgbox ergebnis
End Sub
Sub rechnen(x, y) As Integer
rechnen = x + y
End Sub
Gruß
Stephan
-
- **
- Beiträge: 29
- Registriert: Mo, 08.11.2010 20:25
Re: Rückgabewert einer Sub
Hallo Stephan, wie immer gründlich und gnapp
Danke
Max

Danke
Max
Re: Rückgabewert einer Sub
Aloha
Dieses doch eher ungewöhnliche Verhalten ist mir auch neulich per Zufall aufgefallen, aber irgendwie scheint mir das nicht ganz "richtig" und widerspricht zudem der Beschreibung im OOo Wiki.
Abgesehen von der Leserlichkeit stellt sich mir da nämlich die Frage, ob derartig geschriebene Makros nicht möglicherweise in Zukunft auf einmal fehlerhaft sein könnten.
Weisst Du zufällig, ob die Verwendung von Rückgabewerten bei Prozeduren so gedacht und gewollt ist?Stephan hat geschrieben:Code: Alles auswählen
Sub Arbeit() ergebnis = rechnen(3, 4) * 15 Msgbox ergebnis End Sub Sub rechnen(x, y) As Integer rechnen = x + y End Sub
Dieses doch eher ungewöhnliche Verhalten ist mir auch neulich per Zufall aufgefallen, aber irgendwie scheint mir das nicht ganz "richtig" und widerspricht zudem der Beschreibung im OOo Wiki.
Abgesehen von der Leserlichkeit stellt sich mir da nämlich die Frage, ob derartig geschriebene Makros nicht möglicherweise in Zukunft auf einmal fehlerhaft sein könnten.
-
- **
- Beiträge: 29
- Registriert: Mo, 08.11.2010 20:25
Re: Rückgabewert einer Sub
Was mich anbelangt, es funktioniert. Inzwischen schon einige dutzend Male. Von der Logik begriffen, habe ich es allerdings nicht. Ich habe jetzt vor, noch einige andere - immer wiederkehrende - größere Subs nach diesem Rezept zu basteln. Mal sehen, obs da auch funktioniert.DPunch hat geschrieben:Aloha
Weisst Du zufällig, ob die Verwendung von Rückgabewerten bei Prozeduren so gedacht und gewollt ist?Stephan hat geschrieben:Code: Alles auswählen
Sub Arbeit() ergebnis = rechnen(3, 4) * 15 Msgbox ergebnis End Sub Sub rechnen(x, y) As Integer rechnen = x + y End Sub
Dieses doch eher ungewöhnliche Verhalten ist mir auch neulich per Zufall aufgefallen, aber irgendwie scheint mir das nicht ganz "richtig" und widerspricht zudem der Beschreibung im OOo Wiki.
Abgesehen von der Leserlichkeit stellt sich mir da nämlich die Frage, ob derartig geschriebene Makros nicht möglicherweise in Zukunft auf einmal fehlerhaft sein könnten.
Max
Re: Rückgabewert einer Sub
Leider nein. Dazu müßte ich praktisch ein entsprechendes Spezifikationsdokument kennen, welches diese Funktion beschreibt, ich kenne jedoch keines.Weisst Du zufällig, ob die Verwendung von Rückgabewerten bei Prozeduren so gedacht und gewollt ist?
Wenn ich mir irgendwas im Wiki anschauen soll brauchte ich den Link, mir ist nicht automatisch klar um welche Wikiseite es hier geht.Dieses doch eher ungewöhnliche Verhalten ist mir auch neulich per Zufall aufgefallen, aber irgendwie scheint mir das nicht ganz "richtig" und widerspricht zudem der Beschreibung im OOo Wiki.
Seriös ist das nur mit einem "Ja, Aber" zu beantworten. Mindestbedingung für Zukunftsicherheit wäre spezifiziertes Funktionieren, das gibt es aber bei OOo an so vielen Stellen nicht, das ich fast denke es lohnt sich nicht ernsthaft darüber nachzudenken.Abgesehen von der Leserlichkeit stellt sich mir da nämlich die Frage, ob derartig geschriebene Makros nicht möglicherweise in Zukunft auf einmal fehlerhaft sein könnten.
Das ist auch die Antwort die ich Dir aus meiner OOo-Berufspraxis geben würde, denn dort gebe ich praktisch nur noch Makros OOo-versionsweise frei, da auch bei erhöhtem Aufwand, zwecks Überlegungen zur zukunftssicheren Implementierung, keine verlässliche Implementierung möglich ist. In den 1er Versionen von OOo war das früher mal anders, aber seit 2.x ist die Lage leider so.
Man kann zwar auch heute Glück haben das Implementierungen nicht von von der OOo-Version abhängig sind, aber in den letzten Jahren gebe ich jegliche Dinge die ich beruflich für Kunden programmiere nur immer für konkrete OOo-Versionen frei und nicht mehr 'allgemein'.
Ich denke die Frage von DPunch zielte wohl eher auf das Grundsätzliche.Was mich anbelangt, es funktioniert. Inzwischen schon einige dutzend Male.
Die LÖsung die ihm vorschwebt dürfte wohl sein:
Code: Alles auswählen
Sub Arbeit()
ergebnis = rechnen(3, 4) * 15
MsgBox ergebnis
End Sub
Function rechnen(x As Integer, y As Integer) As Integer
rechnen = x + y
End Function
Wahrscheinlich hätte DPunch auch nichts gegen sowas:
Code: Alles auswählen
Global rechnen As integer
Sub Arbeit()
berechnen(3, 4)
ergebnis = rechnen * 15
Msgbox ergebnis
End Sub
Sub berechnen(x, y)
rechnen = x + y
End Sub
Gruß
Stephan
Re: Rückgabewert einer Sub
Auch wenn ich noch nicht so lange dabei bin ...
Irgendwo habe ich gelesen, dass nur Funktionen einen Wert zurückgeben können. Das es auch mit einer Sub geht, nun ja.
Ich verwende für Rückgaben lieber ausschließlich Funktionen. Ist irgendwie eindeutiger für mich.
Irgendwo habe ich gelesen, dass nur Funktionen einen Wert zurückgeben können. Das es auch mit einer Sub geht, nun ja.
Ich verwende für Rückgaben lieber ausschließlich Funktionen. Ist irgendwie eindeutiger für mich.
Sven
Re: Rückgabewert einer Sub
Aloha
Dass Du hier keinerlei Bedenken beim Verwenden von Rückgabewerten bei Prozeduren hattest, hat mich aus irgendwelchen Gründen vermuten lassen, dass das Thema möglicherweise z.B. in ein Mail-Reader schonmal zur Sprache gekommen ist und Du daher vielleicht genaueres weisst.
Konkret meine ich: OOo Wiki: Procedures and FunctionsStephan hat geschrieben:Wenn ich mir irgendwas im Wiki anschauen soll brauchte ich den Link, mir ist nicht automatisch klar um welche Wikiseite es hier geht.
A function, just like a procedure, combines a block of programs to be executed into one logical unit. However, unlike a procedure, a function provides a return value.
Auf die Idee, da nochmal nachzuhaken, bin ich im Endeffekt auch nur gekommen, weil Du bei einer anderen Gelegenheit (leere Elemente in einem Array aus PropertyValues -> Post) darauf hingewiesen hattest, dass man zwecks "Zukunftssicherheit" lieber von Anfang an den sauberen Weg geht.Stephan hat geschrieben:Seriös ist das nur mit einem "Ja, Aber" zu beantworten. Mindestbedingung für Zukunftsicherheit wäre spezifiziertes Funktionieren, das gibt es aber bei OOo an so vielen Stellen nicht, das ich fast denke es lohnt sich nicht ernsthaft darüber nachzudenken.
Dass Du hier keinerlei Bedenken beim Verwenden von Rückgabewerten bei Prozeduren hattest, hat mich aus irgendwelchen Gründen vermuten lassen, dass das Thema möglicherweise z.B. in ein Mail-Reader schonmal zur Sprache gekommen ist und Du daher vielleicht genaueres weisst.
Aus prinzipieller Abneigung gegenüber globalen Variablen dachte ich eher an das Ausnutzen der ByReference-Übergabe von Parametern, wobei das Ergebnis das gleiche bleibt, nur fühlt sich das Verwenden von Prozeduren mit Rückgabewerten für mein persönliches Verständnis einfach... "falsch" an.Stephan hat geschrieben:Wahrscheinlich hätte DPunch auch nichts gegen sowas:Code: Alles auswählen
Global rechnen As integer Sub Arbeit() berechnen(3, 4) ergebnis = rechnen * 15 Msgbox ergebnis End Sub Sub berechnen(x, y) rechnen = x + y End Sub
Code: Alles auswählen
Sub Arbeit
Dim ergebnis as Integer
Berechnen(5,3,ergebnis)
Msgbox ergebnis
End Sub
Sub Berechnen(a as Integer,b as Integer,ergebnis as Integer)
ergebnis = a + b
End Sub
Re: Rückgabewert einer Sub
Ja sicher, diese Kritik ist durchaus berechtigt.Auf die Idee, da nochmal nachzuhaken, bin ich im Endeffekt auch nur gekommen, weil Du bei einer anderen Gelegenheit (leere Elemente in einem Array aus PropertyValues -> Post) darauf hingewiesen hattest, dass man zwecks "Zukunftssicherheit" lieber von Anfang an den sauberen Weg geht.
ich schrieb die jetzige Lösung deshalb so wie ich sie geschrieben habe, weil:
Also das war mein Grund das zu tun.... hat damit zu tun das Du konkret nach Sub gefragt hast und ich mir dachte Du wirst Deine Gründe haben.
Wenn Du mich jetzt aber im Nachhinein auf das Problem aufmerksam machts, würde ich nachträglich sagen:
(a)
bei dem Array-Beispiel lag ganz sicher ein Fehler vor, bei dem jetzigen Beispiel wahrscheinlich auch.
(b)
ich habe manchmal Gründe Dinge in abweichender Weise zu kommentieren, beispielsweise weil ich glaube aufgrund des 'Gegenüber' einen bestimmten Blickpunkt hervorheben zu müssen
(war jedoch hier nicht der Fall, mein Grund war ganz banal der den ich oben genannt habe)
(c)
ich bin nicht immer in gleicher Tagesform, manchmal sehe ich Dinge einfach anders auch ohne konkreten GRund, oder ich mache schlicht Fehler in meinen Aussagen
Nachhaken ist aber nie falsch.
Auch diskutiere ich sehr gerne solche Details, wie die um die es hier geht, weil ich das anregend finde, jetzt im Konkreten z.B. durch Dein Beispiel, weil ich diese Lösung zwar irgendwo auch kenne, sie praktisch aber nie benutze und sie deshalb meinerseits so in Vergessenheit war das ich sie nicht mal angeführt habe, weil sie mir nicht in den Sinn kam.
Gruß
Stephan
Re: Rückgabewert einer Sub
Aloha
Jeder hat seine Gründe, warum er so oder so antwortet, ganz klar - ich habe den Grund halt irgendwie darin vermutet, dass Du als Moderator und Beteiligter des Projektes vielleicht mehr wissen könntest, als der normale Benutzer.
Nix für Ungut.
Als Kritik war das gar nicht gemeint, sondern nur als Erklärung, warum ich da jetzt so explizit nachhake.Stephan hat geschrieben:Ja sicher, diese Kritik ist durchaus berechtigt.
Jeder hat seine Gründe, warum er so oder so antwortet, ganz klar - ich habe den Grund halt irgendwie darin vermutet, dass Du als Moderator und Beteiligter des Projektes vielleicht mehr wissen könntest, als der normale Benutzer.
Nix für Ungut.
Tatsächlich anwenden tue ich die Manipulation ByReference auch sehr, sehr selten, es ist aber trotzdem die einzige Lösung, die sich beim Verwenden von Prozeduren mit "quasi"-Rückgabewert wenigstens noch "richtig" anfühlt für mich - vielleicht bin ich da aber auch zu sehr in meiner Ausbildung und dem da gelernten gefangen.Stephan hat geschrieben:Auch diskutiere ich sehr gerne solche Details, wie die um die es hier geht, weil ich das anregend finde, jetzt im Konkreten z.B. durch Dein Beispiel, weil ich diese Lösung zwar irgendwo auch kenne, sie praktisch aber nie benutze und sie deshalb meinerseits so in Vergessenheit war das ich sie nicht mal angeführt habe, weil sie mir nicht in den Sinn kam.
Re: Rückgabewert einer Sub
Als Kritik war das gar nicht gemeint, sondern nur [...]
Nix für Ungut.
Und ich werde es nimmer verstehen ...

Nun ja, ich werde mir trotzdem erlauben weiterhin Kritik als etwas Positives zu begreifen.

Gruß
Stephan