Einleitende Beispiele zur Deklaration von Wertmethoden in Java (Einleitende Beispiele zur Deklaration von Wertmethoden in Java), Lektion, Seite 723341
https://www.purl.org/stefan_ram/pub/werthmethodendeklarationseinleitung_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Einleitende Beispiele zur Deklaration von Wertmethoden in Java 

Einfache Wertmethoden der Standardbibliothek

Die folgende Methode der Standardbibliothek zeigt, daß in der Standardbibliothek für die Festlegung einfacher Werte durchaus nicht immer Konstanten verwendet werden, sondern auch Methoden zum Einsatz kommen.

Dokumentation von »java.lang.System.lineSeparator()« (gekürzt und übersetzt)
java.lang
Klasse System
static java.lang.String lineSeparator()
Ergibt den Zeilenabschluß des Betriebssystems.
Main.java

public final class Main
{

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Von links brausen Autos und Lastkraftwagen" +
java.lang.System.lineSeparator() +
"in Richtung Norden vorbei." ); }}

transcript
Von links brausen Autos und Lastkraftwagen
in Richtung Norden vorbei.

Die Methode »java.lang.System.lineSeparator()« ergibt einen Text, der unter dem Betriebssystem, unter dem Java  gerade läuft, normalerweise als Zeilenende verwendet wird. Die Ausgabe dieses Textes beendet also die bisher ausgegebene Zeile.

Unter verschiedenen Betriebssystemen kann das Ergebnis dieser Methode unterschiedlich sein. Da sich das Betriebssystem aber nicht während des Ablaufs eines Programms ändert, ist der Wert dieser Methode während des Ablaufs eines Programms konstant.

Einleitendes Beispiel zur Deklaration von Wertmethoden

Das folgende Programm gibt das Produkt von 2 mit 7 aus. Die Zahl 7 wird dabei durch ein Numerale  notiert. Solche Numeralia wurden schon behandelt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 * 7 ); }}
java.lang.System.out
14

Das folgende Programm gibt das Produkt von 2 mit der Anzahl der Tage einer Woche aus. Die Anzahl der Tage einer Woche wird dabei durch einen Namen  notiert. Solche Konstanten wurden schon behandelt.

Main.java

public final class Main
{

public static void main( final java.lang.String[] args )
{ final int anzahlDerTageEinerWoche = 7;

java.lang.System.out.println( 2 * anzahlDerTageEinerWoche ); }}

java.lang.System.out
14

Das folgende Programm gibt das Produkt von 2 mit der Anzahl der Tage einer Woche aus. Die Anzahl der Tage einer Woche wird dabei durch einen Methodenaufruf  ermittelt. Solche Aufrufe von Wertmethoden wurden schon früher behandelt.

Main.java

public final class Main
{

public static int anzahlDerTageEinerWoche(){ return 7; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 * anzahlDerTageEinerWoche() ); }}

java.lang.System.out
14

Der Aufrufausdruck  (z.B. »anzahlDerTageEinerWoche()«) steht für den Rückgabewert  (z.B. «7»).

Die Rückgabe mit »return«

In der Deklaration der Wertmethode »anzahlDerTageEinerWoche« wird als Wert einer Auswertung des Aufrufausdrucks »anzahlDerTageEinerWoche()« mit der Anweisung »return 7;« der Wert »7« festgelegt.

Man sagt dazu auch, der Wert 7 werde zurückgegeben. Einen Wert zurückgeben  heißt dabei, den Wert der Auswertung des Aufrufausdrucks, der zum Aufruf der Methode führte, durch diesen Wert festzulegen.

Durch die Rückgabe wird der Wert des Aufrufs festgelegt.

Wir nennen eine mit der lexikalischen Einheit »return« beginnende Anweisung eine Rückgabeanweisung  und den hinter »return« stehenden Ausdruck Rückgabeausdruck.

Der Typ des Aufrufs

Außerdem wurde bei der Deklaration der Methode »anzahlDerTageEinerWoche« das Schlüsselwort »void«, welches bisher immer in einer Methodendeklaration vor dem Methodennamen stand durch das Schlüsselwort »int« ersetzt. Dadurch wird festgelegt, daß der Ausdruck zum Aufruf jener Methode den Typ »int« hat. Eine Methode, die nicht  mit »void« vor ihrem Namen deklariert wird, nennen wir eine Wertmethode.

Man kann Konstanten und Methoden beide verwenden, um Werte in verständlicher Weise zu „beschriften“. In diesem Abschnitt wurde beispielsweise der Wert 7 mit dem Etikett »anzahlDerTageEinerWoche« „beschriftet“.

Die Deklaration einer Wertmethode legt den Typ  und den Wert  ihres Aufrufs fest.

Wir nennen den Typ des Aufrufs einer Methode auch den Rückgabetyp.

Der Typ des Ausdrucks hinter »return«

Typanforderung Der Typ des Rückgabeausdrucks muß ein Untertyp  des Rückgabetyps sein.

Wertregel Der Wert eines Aufrufs ist der in den Rückgabetyp gewandelte Wert des Rückgabeausdrucks.

Main.java

public final class Main
{

public static double w(){ return 7; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( w() ); }}

Protokoll
7.0

void-Regel Wenn eine Methode mit »void« an Stelle eines Rückgabetyps deklariert wurde, dann darf sie kein  »return« mit einem Rückgabewert enthalten, sonst muß sie  ein solches »return« enthalten.

Ein kleines Wörterbuch

Die Bedeutung der Verben „ausgeben“ und „zurückgeben“ wird im folgenden immer wieder benötigt. Als Merkhilfe geben wir hier eine kleine Übersetzungstabelle an.

Übersetzungen
ausgeben print
zurückgeben return

Die Position der Rückgabeanweisung

Positionsregel Die Rückgabeanweisung muß die letzte Anweisung  in einer Methodendeklaration sein.

Übungsfragen

?   Ausgabe einer Methode

Welche Ausgabe erzeugt die Auswertung eines Aufrufs der Methode »alpha«?

Methodendeklaration
public static void alpha()
{ java.lang.System.out.println( "Anton" ); }

Ist diese Methode »alpha« eine Wertmethode? – Begründen Sie Ihre Antwort!

Ist diese Methode »alpha« eine Wirkmethode? – Begründen Sie Ihre Antwort!

(Hat die Auswertung eines Aufrufs einer Methode eine Wirkung, so ist die Methode eine Wirkmethode. Ergibt die Auswertung eines Aufrufs einer Methode einen Wert, so ist die Methode eine Wertmethode.)

?   Übungsfrage 0

Welchen Typ und Wert hat ein Aufruf der Methoden der folgenden Methodendeklarationen jeweils?

?   Übungsfrage 1

Welchen Typ hat der Ausdruck »s()« in der letzten Zeile des folgenden Programms?

Welchen Wert hat der Ausdruck »s()« in der letzten Zeile des folgenden Programms?

Main.java

public final class Main
{ public static int s(){ return 3; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( s() ); }}

?   Übungsfrage 2

Ergänzen Sie den Lückentext mit einem Wort: „Die Methode »martha« gibt 3 __________ .“. Setzen Sie entweder „aus“ oder „zurück“ ein.

Methodendeklaration
public static int martha(){ return 3; }

?   Übungsfrage 3

Ergänzen Sie den Lückentext mit einem Wort: „Die Methode »nordpol« gibt 3 __________ .“. Setzen Sie entweder „aus“ oder „zurück“ ein.

Methodendeklaration
public static void nordpol(){ java.lang.System.out.print( 3 ); }

?   Übungsfrage 4 ⃗

Was muß an der Lücke in der folgenden Methodendeklaration stehen, damit die Methode die Zahl 3 ausgibt?

Deklaration mit Lücke
public static void o(){ __________ ( 3 ); }

?   Übungsfrage 5 ⃗

Was muß an der Lücke in der folgenden Methodendeklaration stehen, damit die Methode die Zahl 3 zurückgibt?

Deklaration mit Lücke
public static int p(){ __________ ( 3 ); }

?   Übungsfrage 6 ⃗

Ist der Aufruf »java.lang.Math.random()« in dem folgenden Programm ein Wirkaufruf oder ein Wertaufruf?

(Wirkaufruf: Aufruf, dessen Auswertung eine Wirkung hat; Wertaufruf: Aufruf, dessen Auswertung einen Wert ergibt)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.Math.random() ); }}
transcript
0.8872390359538448

?   Übungsfrage 7 ⃗

Ist die Methode »r()« in dem folgenden Programm eine Wirkmethode oder eine Wertmethode?

(Hat die Auswertung eines Aufrufs einer Methode eine Wirkung, so ist die Methode eine Wirkmethode. Ergibt die Auswertung eines Aufrufs einer Methode einen Wert, so ist die Methode eine Wertmethode.)

Main.java

public final class Main
{

public static double r(){ return 2; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( r() ); }}

?   Übungsfrage 8 _

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{ public static double u(){ java.lang.System.out.print( "grau" ); return 2; }

public static void main( final java.lang.String[] args )
{ u(); java.lang.System.out.println( u() ); }}

?   Übungsfrage 9 _

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{ public static double u(){ java.lang.System.out.print( "grau" ); return 2; }
public static double v(){ java.lang.System.out.print( "blau" ); return 3; }

public static void main( final java.lang.String[] args )
{ final double x = v();
final double y = u();
java.lang.System.out.println(); }}

Diese Übungsfrage zeigt noch einmal, wie wichtig es ist, den Unterschied zwischen Werten  und Wirkungen  zu verstehen.

?   Übungsfrage 10 _

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{ public static double u(){ java.lang.System.out.print( "grau" ); return 2; }
public static double v(){ java.lang.System.out.print( "blau" ); return 3; }

public static void main( final java.lang.String[] args )
{ v();
u();
java.lang.System.out.println(); }}

?   Übungsfrage 11 →

Was muß an der Lücke in der folgenden Methodendeklaration stehen?

Deklaration mit Lücke
public static __________ t(){ return 3.7; }

?   Übungsfrage 12 →

Was muß an der Lücke in der folgenden Methodendeklaration stehen?

Deklaration mit Lücke
public static __________ u(){ java.lang.System.out.println( 3.7 ); }

?   Übungsfrage 13 →

Was muß an der Lücke in der folgenden Methodendeklaration stehen?

Deklaration mit Lücke
public static __________ v(){ return "."; }

?   Übungsfrage 14 →

Was muß an der Lücke in der folgenden Methodendeklaration stehen?

Deklaration mit Lücke
public __________ int w(){ return 2; }

?   Übungsfrage 15 →

Was muß an der Lücke in der folgenden Methodendeklaration stehen?

Deklaration mit Lücke
public static int x(){ __________ 2; }

?   Übungsfrage 16 →

Ist die folgende Methode eine Wertmethode?

Methodendeklaration
public static java.lang.String y(){ return "abc"; }

?   Übungsfrage 17 →

Ist die folgende Methode eine Wertmethode?

Methodendeklaration
public static double z(){ return 3.2; }

?   Übungsfrage 18 →

Ist die folgende Methode eine Wertmethode?

Methodendeklaration
public static void f(){ java.lang.System.out.println( 3 ); }

?   Übungsfrage 19 ⃗

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static int alpha(){ return 3; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 8 ); }}

?   Übungsfrage 20 ⃗

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static int g(){ return 3; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( g() ); }}

?   Übungsfrage 21 ⃗

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static java.lang.String h(){ return "3"; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( h() + "." ); }}

?   Übungsfrage 22 ⃗

Welche Ausgabe erzeugt das folgende Programm?

Programm mit Lücke

public final class Main
{

public static int w() { return 2; }

public static void e() { java.lang.System.out.println( w() ); }

public static void main( final java.lang.String[] args )
{ e(); }}

?   Übungsfrage 23

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static int alpha(){ return 3; }
public static int gamma(){ return alpha() * 4; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( gamma() ); }}

?   Übungsfrage 24 _

Welche Ausgabe erzeugt das folgende Programm?

(Diese Übungsaufgabe unterscheidet sich an einer Stelle von der vorherigen!)

Main.java

public final class Main
{

public static int alpha(){ return 3; }
public static int gamma(){ return alpha() * 4; }

public static void main( final java.lang.String[] args )
{ gamma(); }}

?   Übungsfrage 25 _

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static int i(){ java.lang.System.out.print( 1 ); return 2; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 * i() ); }}

?   Übungsfrage 26 _

Welche Ausgabe erzeugt das folgende Programm?

(Bei der Auswertung eines Produkts wird der erste Operand vor dem zweiten ausgewertet.)

Main.java

public final class Main
{

public static int alpha(){ java.lang.System.out.print( 1 ); return 2; }
public static int gamma(){ java.lang.System.out.print( 3 ); return 4; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( alpha() * gamma() ); }}

?   Übungsfragen 27 →

Welchen Wert ergibt die Auswertung des Aufrufausdrucks »j()«? (Die Antwort muß die Angabe eines Werts sein.)

Welche Wirkung hat die Auswertung des Aufrufausdrucks »j()«? (Die Antwort muß die Angabe einer Tätigkeit sein.)

Methodendeklaration
public static int j(){ java.lang.System.out.println( "H" ); return 2; }

?   Übungsfrage 28 *

Was muß an der Lücke in der folgenden Methodendeklaration stehen, damit die Methode die Zahl 3 sowohl ausgibt als auch zurückgibt?

Deklaration mit Lücke
public static int q(){ __________ ( 3 ); }

?   Übungsfrage 29 →

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static java.lang.String alpha(){ return "anton"; }

public static void main( final java.lang.String[] args )
{ alpha(); }}

 

Wertmethoden als eine Art von Abkürzung ⃗

Main.java

public final class Main
{

public static java.lang.String lkw(){ return "Lastkraftwagen"; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Von links brausen Autos und " + lkw() + " in Richtung Norden vorbei." ); }}

transcript
Von links brausen Autos und Lastkraftwagen in Richtung Norden vorbei.

Das folgende Programm zeigt, wie das obige Programm effektiv ausgeführt wird: Der Wert des Ausdrucks hinter dem Schlüsselwort »return« wird praktisch an der Stelle des Aufrufs der Methode »lkw()« eingesetzt. Dies wird in dem folgenden Programm dadurch dargestellt, daß der Aufruf durch ein Literal mit jenem Wert ersetzt wurde.

Main.java

public final class Main
{

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "Von links brausen Autos und " + "Lastkraftwagen" + " in Richtung Norden vorbei." ); }}

transcript
Von links brausen Autos und Lastkraftwagen in Richtung Norden vorbei.

Wertmethoden im Vergleich mit Konstanten ⃗

Aufrufe von Wertmethoden haben wie Verwendungen von Konstanten einen Wert. Das folgende Programm zeigt jedoch zwei Unterschied zu Konstanten:

Main.java

public final class Main
{

public static double r(){ return java.lang.Math.random(); }

public static void f(){ java.lang.System.out.println( r() ); }

public static void main( final java.lang.String[] args )
{ final double r = java.lang.Math.random();

java.lang.System.out.println( r );
java.lang.System.out.println( r );

java.lang.System.out.println( r() );
java.lang.System.out.println( r() );

f();
f(); }}

Protokoll
0.3782226505961695
0.3782226505961695
0.697355147555445
0.3295290895730469
0.05920506014607307
0.8524929246079386

Wertmethoden im Vergleich mit Wirkmethoden ⃗

Wenn eine Wirkmethode einen Wert ausgibt, so kann dieser im Programm nicht weiterverarbeitet werden.

Der Wert einer Wertmethode kann im Programm noch weiterverarbeitet werden.

Main.java

public final class Main
{

public static void p(){ java.lang.System.out.println( java.lang.Math.random() ); }

public static double r(){ return java.lang.Math.random(); }

public static void main( final java.lang.String[] args )
{

p();
p(); /* Die ausgegebenen Werte können hier nicht summiert werden. */

java.lang.System.out.println( r() + r() ); }}

Protokoll
0.9718335618249145
0.462290951428904
1.0427791435256553

Ein von einer aufgerufenen Methode zurückgegebener Wert kann vom Klienten besser kontrolliert werden als ein von einer aufgerufenen Methode ausgegebener Wert. Der Klient kann beispielsweise selber entscheiden, ob er den zurückgegebenen Wert ausgibt oder auf andere Weise weiterverarbeitet. Daraus ergibt sich folgende

Empfehlung Methoden, die eine Information bereitstellen, sollten diese Information zurückgeben  und nicht  ausgeben.

Falls es schon eine Methode gibt, die eine benötigte Information zurückgibt, dann kann aber zusätzlich bei Bedarf noch eine Methode geschrieben werden, welche die erste Metode aufruft un die von ihr zurückgegebene Information dann ausgibt.

Stilregeln zur Benennung von Wertmethoden ⃗

Eine Wirkmethode sollte nach dem benannt werden, was sie tut. Daher sollte der Name einer Wirkmethode eine Verbalphrase  sein. Beispielsweise »dumpStack« (“dump the stack! ” „Gib den Stapel aus!“).

Eine Wertmethode sollte nach dem Wert benannt werden, den sie ergibt. Daher sollte der Name einer Wertmethode eine Nominalphrase  sein. Beispielsweise »random« (kurz für “random number ” „Zufallszahl“).

(Falls eine Methode sowohl eine Wirkung hat als auch einen Wert ergibt, kann eine der beiden Benennungsarten gewählt  werden. Hierbei kann berücksichtigt werden, welcher jener beiden Aspekte im Vordergrund stehen soll und was bei einem Aufruf natürlicher aussieht.)

Main.java

public final class Main
{

public static void lastkraftwagenAusgeben(){ java.lang.System.out.print( "Lastkraftwagen" ); }

public static java.lang.String lastkraftwagen(){ return "Lastkraftwagen"; }

public static void main( final java.lang.String[] args )
{

java.lang.System.out.print
( "Von links brausen Autos und " );
lastkraftwagenAusgeben();
java.lang.System.out.println
( " in Richtung Norden vorbei." );


java.lang.System.out.println
( "Von links brausen Autos und " + lastkraftwagen() + " in Richtung Norden vorbei." ); }}

Protokoll
Von links brausen Autos und Lastkraftwagen in Richtung Norden vorbei.
Von links brausen Autos und Lastkraftwagen in Richtung Norden vorbei.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723341 stefan_ram:723341 Einleitende Beispiele zur Deklaration von Wertmethoden in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723341, slrprddef723341, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/werthmethodendeklarationseinleitung_java