Einführung in die Definition von Wertroutinen im Rahmen der Lehre formaler Sprachen. [] (), Lektion, Seite 721422
http://www.purl.org/stefan_ram/pub/formal_wertrueckgabe_de ist die kanonische URI dieser Seite.
Stefan Ram

Wertrückgabe

Der Aufruf einer Routine kann einen bestimmten Wert  darstellen. Solch eine Routine wird auch Wertroutine  genannt.

Um eine Wertroutine zu definieren, muß der Wert der Routine innerhalb ihrer Definition festgelegt  werden.

Beispielsweise könnte es eine Routine "wochentage" geben, deren Aufruf "wochentage()" den ganzzahligen Wert "7" ergibt. Diese Routine muß dann innerhalb ihrer Definition den Wert "7" als Ergebnis festlegen. Für diesen Zweck gibt es in vielen formalen Sprachen spezielle Sprachelemente.

Der Name einer Wertroutine  sollte angeben, welchen Wert  ihr Aufruf hat. In dem hier gewählten Beispiel deutet der Name "wochentage" an, daß der Wert des Aufrufs die Anzahl der Wochentag, also der Wert 7, ist. Der Name "anzahl_der_tage_einer_woche" wäre noch treffender, erscheint aber als zu lang, so daß der Name "wochentage" bevorzugt wurde, obwohl er etwas mißverständlich ist. (Man könnte auch daran denken, daß der Wert beispielsweise aus den Namen aller Wochentage bestehe.)

Durch Wertroutinen kann einem Wert ein sinnvoller Name gegeben werden. Daß das Numeral "7" in einem bestimmten Fall die Zahl der Wochentage darstellen soll, kann man ihr nicht immer leicht ansehen. Durch die Verwendung des Aufrufs der Wertroutine "wochentage()" anstelle des Numerals "7" wird das klarer.

Aus Sicht der Routine sagt man auch, daß die Festlegung eines bestimmten Wertes als Ergebnis der Routine die Rückgabe  des Wertes (an den Aufrufer) darstelle oder daß der Wert zurückgegeben  werde. Dies kommt daher, daß die Routine die Kontrolle ja vom Aufrufer erhält  und später wieder an den Aufrufer zurückgibt. Bei einer Wertroutine wird mit der Kontrolle auch ein Wert zurückgegeben, der zum Wert des Aufrufs  wird.

Die Anweisung "Wert wochentage() ausgeben." wird durch die Rückgabe des Wertes "7" also praktisch zur Anweisung "Wert 7 ausgeben.", so daß dann der Wert "7" ausgegeben wird.

Aufruf einer Wertroutine in einer Ausgabeanweisung
 
1.) Aufruf 
.----------------------------------. 
| | 
Wert wochentage( ) ausgeben. | 
'-----------' | 
^ 7 | 
|| | | 
|| | | 
|| | | 
|| | V 
|| | .-------------------------. 
|| | | Routine wochentage | 
|| | |-------- ----------------| 
|| | | Wert 7 zurueckgeben. | 
|| | 2.) Rueckgabe '------|------------------' 
|| '--------------------------------' 
|| 
|| 
\||/ 3.) Der Ausdruck "wochentage( )" wird 
\/ sozusagen durch seinen Wert ersetzt. 
 
Wert 7 ausgeben.

Ausgabe
7

Die Rückgabe  darf nicht mit der Ausgabe  verwechselt werden.

Anfängern fällt es oft schwer zwischen Rückgabe  und Ausgabe  zu unterscheiden: Mit der Rückgabe  eines Wertes wird von einer Routine ein Wert für den Aufruf  der Routine festgelegt. Eine Ausgabe  eines Wertes schreibt eine Darstellung des Wertes auf ein Peripheriegerät  (z.B. Bildschirm, Drucker, Festplatte). Ein zurückgegebener Wert kann im Programm  weiterverarbeitet werden. Ein ausgegebener Wert wird außerhalb des Programmes  sichtbar und kann von Menschen oder anderen Programmen gelesen werden.

Wenn man sagt, daß eine Wertmethode einen Wert zurückgibt, dann meint man damit nicht, daß sie etwas auf den Bildschirm ausgibt (das wäre eine „Wirkung“): Mit „Rückgabe eines Wertes“ wird vielmehr der Wert f () der Anwendung der Methode f  gemeint.

Werte und Wirkungen vermischen

Übungsaufgabe In einer Programmiersprache sei eine Wertmethode "Zeit" enthalten, deren Wert die aktuelle Uhrzeit ist? Welche Nachteile hat es, wenn diese ihr Ergebnis immer auf den Bildschirm ausgibt?

Eine Wertmethode sollte nichts ausgeben, wenn ihr Hauptzweck die Wertermittlung ist.

Wenn der Zweck einer Routine in der Ermittlung eines bestimmten Wertes besteht, der dann von ihr zurückgegeben wird, dann sollte es vermieden werden, daß diese Routine weitere Wirkungen hat. Insbesondere sollte solch eine Routine nichts ausgeben. Denn nicht immer sind solche Wirkungen oder Ausgaben erwünscht, wenn der Wert benötigt wird. Für gewünschte Wirkungen und Ausgaben kann gegebenenfalls eine separate Wirkroutine bzw. Ausgaberoutine erstellt werden. (Wird beides öfter zusammen gebraucht kann es dann in einer weiteren Mischmethode kombiniert werden.) Nur in gut begründeten Einzelfällen sollte von dieser Regel abgewichen werden.

Gestaltungsregel Programmteile zum Einlesen und Ausgaben sind von Programmteilen zum Zwecke der Berechnung eines Wertes zunächst immer getrennt zu definieren. Bei Bedarf kann darauf aufbauen eine weitere Methode definiert werden, die beide vereint.

Benennung

Eine Wertunterprogramm, das einen bestimmten Wert zurückgibt, sollte nach diesem Wert benannt werden. Gibt ein Wertunterprogramm beispielsweise eine Breite oder Zeit zurück, dann sollte sie mit dem Bezeichner "breite" bzw. dem Bezeichner "zeit" benannt werden.

Strukturierung

Die Anweisung zur Festlegung des Ergebnisses einer Methode (innerhalb der Methode) bewirkt in einigen Programmiersprachen auch einen Sprung aus der Methode. Solch ein Sprung ist aber unstrukturiert, wenn er mitten aus der Methode erfolgt oder gar mehrfach in einer Methode vorkommen. Unstrukturierter Code ist unübersichtlich, fehleranfällig und schwer zu pflegen und sollte daher vermieden werden.

Gestaltungsprinzip Jede Methode sollte nur eine Rückgabeanweisung enthalten. Sie sollte die letzte Anweisung der Methodendefinition sein.

Um eine Funktion auf diese Weise zu gestalten, ist es manchmal hilfreich, das Ergebnis während des Methodenablaufs in eine Variable zu schreiben und am Ende der Methode diese Variable als Ergebnis festzulegen.

{$ugy~}

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz