Autor Beitrag
OldCat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Mi 24.11.21 14:54 
Liebe Gemeinschaft,

wieder einmal mehr wende ich mich an euch mit einer grundlegenden Frage, die mir das Internet nicht beantworten kann, wie mir scheint.

Gestern wurde mir klar, ich habe den Sinn von Rückgabewerten in Methoden nicht verstanden. Nach längerer Suche, von den Microsoft.Docs bis "überallhin", fand ich keine Antwort auf die Frage, wofür ich denn ein Rückgabewert nutzen sollte oder gar müsste. Und wann Methoden keinen brauchen.
Zwar lese ich mal mehr mal weniger umständlich formuliert, was Rückgabewerte sind, bzw. was sie tun, doch hat sich für mich nicht der tatsächliche Sinn offenbart.

Mit der Antwort auf die Frage 'wofür brauche ich sie' erhoffe ich mich einen inneren Zugang zu Rückgabewerten in Methoden. Ich habe nur euch, die ich fragen kann.

Mein Frage: 'Warum' und 'wann' sollte ich Rückgabewerte in Methoden nutzen? :?

Liebe Grüße
OldCat
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4577
Erhaltene Danke: 951


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.11.21 15:03 
Was wäre die Alternative für dich? Bzw. was würdest du den anstatt Rückgabewerte machen? Welchen Anwendungsfall hattest du im Kopf wo das unsinnig erscheint.

Nehmen wir wieder mal was aus dem Framework als Beispiel.
Es gibt da z.b. die Math.Round Methode. Da geht irgendein Zahlenwert rein kommt ein gerundeter Zahlenwert raus. Wie würdest du diese Methode schreiben wenn es keinen Rückgabewert gäbe?
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Mi 24.11.21 15:57 
Zitat:
user profile iconRalf Jansen
Was wäre die Alternative für dich? Bzw. was würdest du den anstatt Rückgabewerte machen? Welchen Anwendungsfall hattest du im Kopf wo das unsinnig erscheint.
Genau da fängt mein Problem schon an: Wenn es nach mir ginge, würde ich wohl immer nur void-Methoden schreiben :gruebel: Da ist in meinem Kopf nur das Zirpen einer einsamen Grille zu hören ... (ergo, Was das Thema angeht: komplette Kopfleere).

Zitat:
user profile iconRalf JansenEs gibt da z.b. die Math.Round Methode. Da geht irgendein Zahlenwert rein kommt ein gerundeter Zahlenwert raus. Wie würdest du diese Methode schreiben wenn es keinen Rückgabewert gäbe?
Diese Methode war mir bis dato unbekannt. Auch hier ist mir der Sinn nicht klar. (Im Übrigen geht es mir mit Eingabeparametern recht ähnlich).

Und das ist meine Angst: Nie die Notwendigkeit sehen zu können, wann ich selbst einen Rückgabewert für eine Methode brauchen würde, und wann nicht. Daher habe ich jetzt entschieden, ich muss dringend verstehen, wann ich ihn brauche, und wann nicht.
Die Metapher der einsam zirpenden Grille in meinem Kopf muss dringend enden. Die Leere in meinem Kopf, was Rückgabewerte angeht, muss enden.

:nut:
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4577
Erhaltene Danke: 951


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.11.21 16:51 
Zitat:
Genau da fängt mein Problem schon an: Wenn es nach mir ginge, würde ich wohl immer nur void-Methoden schreiben

Aber im genannten Beispiel von Math.Round wo wäre da der Sinn wenn die void zurückgibt? Irgendwoher brauchst du doch ein Ergebnis einer Methode.
Manchmal hat man den Fall das eine Methode nur den Zustand einer Klasse ändert dann braucht man keinen Return aber ansonsten ruft man Methoden auf die was verändern und das möchte man doch gern wissen also zurückbekommen. Oder man muß andere Wege haben um an das veränderte zu kommen.

Das mag jetzt wieder so ein blödes "so wie typischerweise Beispiele funktionieren" Problem sein. Weil da der Einfachheithalber direkt ein Ergebnis von irgendwas auf der Console ausgegeben wird und ich es darüber hinaus nirgendwo anders brauche. Das passiert aber so nur in Beispielen. Das passiert nur in den simplesten Fällen von Code so (aka in Codebeispielen).


Wenn du ein Beispiel brauchst um das zu probieren. Schreibe einen simplen Taschenrechner für die Konsole.
Also Eingabe von zwei Zahlen und einem Operator. Und trenne dabei Aufgaben einingermassen von einander.
Aufgaben wären Eingabe, Berechnung, Ausgabe somit 3 verschiedene Dinge die an 3 verschiedenen Stellen passieren sollen (mindestens 3 verschiedenen Methoden oder sogar Klassen).

Wenn du dabei ohne Parameter, Rückgabewerte oder ähnliches auskommst hast du am Ende möglicherweise Recht und das alles ist unnötig ;)
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Mi 24.11.21 17:28 
Zitat:
user profile iconRalf Jansen
Wenn du ein Beispiel brauchst um das zu probieren. Schreibe einen simplen Taschenrechner für die Konsole.
Also Eingabe von zwei Zahlen und einem Operator. Und trenne dabei Aufgaben einingermassen von einander.
Aufgaben wären Eingabe, Berechnung, Ausgabe somit 3 verschiedene Dinge die an 3 verschiedenen Stellen passieren sollen (mindestens 3 verschiedenen Methoden oder sogar Klassen).
Die Aufgabe ist angenommen. Probiere ich umgehend mal aus :zustimm:

Nachtrag: Es fällt mir schwerer als gedacht. Es ist kein Problem die Aufgabe in "einem Wisch" in die Main() Methode zu schreiben ... doch eine andere, mehrere Methoden zu verwenden mit User-Eingabe.
Habe jetzt zwei Quellcodes geschrieben, einen besonders rudimentären und einen mit etwas mehr Code. Doch die Aufgabenstellung ist in beiden nicht gelöst.

Werde wohl länger für ne Antwort brauchen, als gedacht :mrgreen: