Warum kann eine Funktion nur einen Wert zurückgeben und nicht mehrere?

In Java ist das durch Designentscheidungen, die von den Entwicklern und Entwicklerinnen der Sprache getroffen wurden, festgelegt. In anderen Programmiersprachen wurden diesbezüglich andere Konzepte entwickelt.

In den folgenden Implementierungen wird verglichen, wie Methoden zur Zerlegung von Minuten in Stunden und Minuten umgesetzt werden können.

In Python kann eine Funktion mehrere Werte zurückgeben. Die zwei Werte h und m werden gesetzt, zurückgegeben und den Variablen stunden und minuten zugewiesen.

Python:

def m_to_hm(x):
    m = x % 60
    h = x // 60
    return h, m

stunden, minuten = m_to_hm(175)
print(str(stunden) + ':' + str(minuten))

# Ausgabe: 2:55

In C# gibt es den Mechanismus des out-Parameters. In der Main-Methode werden zwei out-Parameter für Stunde (h) und Minute (m) festgelegt, übergeben und in der Methode m_to_hm() gesetzt.

C#:

static void m_to_hm(int x, out int h, out int m) {
    m = x % 60;
    h = (int)(x / 60);
}

static void Main(string[] args) {
    int h, m;
    m_to_hm(175, out h, out m);
    Console.WriteLine(h + ":" + m);
}
// Ausgabe: 2:55

Allerdings wird die Rückgabe von mehreren Parametern in unterschiedlichen Programmiersprachen oft so realisiert, dass mehrere Parameter implizit zusammengefasst werden, – in Python beispielsweise in ein Tupel. In Java kann man mehrere Parameter zurückgeben, indem man sie in ein Objekt oder Array verpackt.

Java:

class Time {
    final int h, m;

    Time(int h, int m) {
        this.h = h;
        this.m = m;
    }
}

static Time m_to_hm(int x) {
    return new Time(x / 60, x % 60);
}

public static void main(String[] args) {
    Time t = m_to_hm(175);
    System.out.println(t.h + ":" + t.m);
}
// Ausgabe: 2:55