Methoden zurückgeben

MisaghZ
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 11. Okt 2007 15:50

Methoden zurückgeben

Beitrag von MisaghZ » 21. Jan 2008 04:38

hi,
ist es möglich dass eine methode als eine methode zurückgibt?
also return methode();
und wenn ja, was muss ich dann oben im head der methode angeben? public "method" methode(){} ???

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Re: Methoden zurückgeben

Beitrag von mcdikki » 21. Jan 2008 06:10

Ja, geht.

private int abc() {
return getX(3,2);
}

private int getX(int a, int b) {
return a + b;
}

Geht ohne problem da abc() vom typ int ist, also eine int zurückgeben muss.
getX ist auch vom typ int und damit kann ich wunderbar methoden verketten.

lg und gute nach (morgen)

mcdikki

MisaghZ
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 11. Okt 2007 15:50

Re: Methoden zurückgeben

Beitrag von MisaghZ » 21. Jan 2008 06:19

achso!

alles klar
danke!

Benutzeravatar
mantra
Computerversteher
Computerversteher
Beiträge: 385
Registriert: 23. Okt 2005 23:56
Wohnort: Wiesbaden

Re: Methoden zurückgeben

Beitrag von mantra » 21. Jan 2008 10:26

Das ist aber nicht ganz das, was man unter "Methode zurückgeben" verstehen würde.
Was man mit

Code: Alles auswählen

private int abc() {
return getX(3,2);
}
zurückgibt, ist keine Methode, sondern das Ergebnis eines Methodenaufrufs: Eine Zahl.

Im Vergleich dazu kann man in Scheme tatsächlich Funktionen zurückgeben:

Code: Alles auswählen

(define (f x)
   (lambda (y) (* x y)))
Der Aufruf (f 3) gibt eine Funktion mit Parameter y zurück, die y mit 3 multipliziert.
Das in Java zu erreichen, ist nur über Umwege möglich.

MisaghZ
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 11. Okt 2007 15:50

Re: Methoden zurückgeben

Beitrag von MisaghZ » 21. Jan 2008 10:31

ja genau
so wie in scheme hatte ich mir das eigentlich vorgestellt

aber wenn man das ergebnis einer methode zurückgibt kommt das aufs gleiche hinaus
ob ich die methode erst jetzt oder später auswerte ist egal
also zumindest für das was ich damit machen will

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Methoden zurückgeben

Beitrag von guido » 21. Jan 2008 11:57

MisaghZ hat geschrieben:ja genau
so wie in scheme hatte ich mir das eigentlich vorgestellt

aber wenn man das ergebnis einer methode zurückgibt kommt das aufs gleiche hinaus
ob ich die methode erst jetzt oder später auswerte ist egal
also zumindest für das was ich damit machen will
Dann ist es ja gut :)

Methoden kann man auch zurückgeben, aber das ist eher etwas für "Eingeweihte". Interessenten schauen sich die Java-Doku unter java.lang.reflect.Method an... sowie das sehr gute (aber nicht triviale) Tutorial unter http://java.sun.com/docs/books/tutorial/reflect/

Guido

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Re: Methoden zurückgeben

Beitrag von mcdikki » 21. Jan 2008 15:29

mantra hat geschrieben:Das ist aber nicht ganz das, was man unter "Methode zurückgeben" verstehen würde.
Was man mit

Code: Alles auswählen

private int abc() {
return getX(3,2);
}
zurückgibt, ist keine Methode, sondern das Ergebnis eines Methodenaufrufs: Eine Zahl.
Ja, das stimmt. Aber ich hatte es auch so verstanden, dass es ums ergebnis geht.
Ausserdem entschuldige ich mich mit der Uhrzeit des Posts :-)

lg

Tillmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 5. Dez 2003 21:27
Wohnort: Frankfurt

Re: Methoden zurückgeben

Beitrag von Tillmann » 22. Jan 2008 17:30

mantra hat geschrieben:Im Vergleich dazu kann man in Scheme tatsächlich Funktionen zurückgeben:

Code: Alles auswählen

(define (f x)
   (lambda (y) (* x y)))
Der Aufruf (f 3) gibt eine Funktion mit Parameter y zurück, die y mit 3 multipliziert.
Das in Java zu erreichen, ist nur über Umwege möglich.
Java kennt "anonyme Klassen", die so ähnlich funktionieren wie die anonymen Funktionen, die man in Scheme mit lambda erstellt. Damit könnte man sowas programmieren:

Code: Alles auswählen

interface Function {
    public int apply(int argument);
}

public Function add(final int x) {
    // wir erzeugen eine anonyme Klasse und 
    // eine Instanz dieser Klasse auf einmal
    return new Function() {
        public int apply(int argument) {
            // wie in Scheme können wir sowohl argument (innerhalb der anonymen Klasse gebunden)
            // als auch x (außerhalb der anonymen Klasse gebunden) nutzen. Stichwort: Closure.
            return argument + x;
        }
    };
}

public void test() {
    Function inc = add(1);
    Function add10 = add(10);

    System.out.println(inc.apply(1)); // gibt 2 aus
    System.out.println(add10.apply(5)); // gibt 5 aus
}
Fazit: Java unterstützt zwar keine Funktionen als Parameter- und Rückgabetypen, kann aber eine ähnliche Programmierweise nachbilden. Dummerweise werden aus einem simplen lambda in Scheme mehrere Zeilen in Java, so daß es sich meist nicht lohnt.

Benutzeravatar
C--
Mausschubser
Mausschubser
Beiträge: 96
Registriert: 2. Okt 2006 15:08
Wohnort: Gelnhausen

Re: Methoden zurückgeben

Beitrag von C-- » 22. Jan 2008 20:44

Ein Jammer, das in Java so "Aufwand" betrieben werden muss, um das Verhalten von Funktionszeigern (C/C++) bzw. delegates (C#) zu erhalten.
Team?
Toll Ein Anderer Machts

Antworten

Zurück zu „Archiv“