CodeGym /Kurse /C# SELF /Rückgabewert und der Operator return

Rückgabewert und der Operator return

C# SELF
Level 8, Lektion 3
Verfügbar

1. Einführung

Stell dir vor: Du bestellst Pizza am Telefon (oder per App, wir leben ja schließlich im 21. Jahrhundert). Du gibst dem Operator die Bestelldetails durch, und der Operator gibt dir das Ergebnis zurück: die Pizza! Wenn der Operator schweigt – bleibst du hungrig und unglücklich.

Genauso ist es mit Funktionen: Manchmal sollen sie einfach nur etwas tun, aber oft will man, dass die Funktion auch noch etwas Nützliches zurückgibt – und das Ergebnis kann jedes Mal anders sein, je nach Eingabedaten! Zum Beispiel:

  • Eine Funktion berechnet die Summe von zwei Zahlen und gibt das Ergebnis zurück.
  • Eine Funktion bekommt das Alter einer Person und gibt die Kategorie zurück ("Kind", "Erwachsener", "Rentner").
  • Eine Funktion erstellt einen schönen Begrüßungsstring für den Benutzer mit Namen.

Rückgabewert – das ist die Art, wie eine Funktion ihr Ergebnis „nach draußen“ weitergibt.

2. Methodensignatur mit Rückgabewert

In der letzten Vorlesung haben wir so eine Vorlage gesehen:

void PrintHello()
{
    Console.WriteLine("Hallo!");
}
Methode ohne Rückgabewert ( void)

Der Typ void bedeutet, dass die Funktion nichts zurückgibt (void heißt „leer“, also kein Wert).

Jetzt schauen wir uns an, wie eine Funktion aussieht, die etwas zurückgibt:

int Add(int a, int b)
{
    // Funktionskörper
}
Methode mit Rückgabewert ( int)

Hier steht int vor dem Funktionsnamen – das ist der Datentyp des Rückgabewerts. Wenn die Funktion einen String zurückgibt, schreiben wir string, bei Kommazahlen double usw.

Der Syntax für die Funktionsdeklaration sieht so aus:

<Rückgabetyp> MethodenName(<Parameter>)
{
    // Funktionskörper
}
Allgemeine Vorlage für eine Methode mit Rückgabewert

Beispiele für verschiedene Signaturen:

Signatur Was wird zurückgegeben
int Sum(int a, int b)
Ganze Zahl
string GetGreeting(string name)
String
double Multiply(double x, double y)
Kommazahl
bool IsAdult(int age)
Boolescher Wert

3. Der Operator return: Wie gibt man ein Ergebnis aus einer Funktion zurück?

Damit alles funktioniert, reicht es nicht, nur den richtigen Typ anzugeben – die Funktion muss auch das Ergebnis „nach oben“ schicken. Dafür gibt es den Operator return. Damit sagen wir: Hier, ich gebe diesen Wert zurück, und ab da wird die Funktion sofort beendet (sie „verlässt“ quasi an dieser Stelle).

Typ MethodenName(...)
{
    // irgendwelche Berechnungen
    return Wert;
}
Schema für die Verwendung von return

Beispiel:

int Add(int a, int b)
{
    int sum = a + b;
    return sum; // Wir geben die Summe als Ergebnis der Funktion zurück
}

Wichtiges Regel: Der Typ des Wertes, den du mit return zurückgibst, muss genau (oder kompatibel) mit dem Typ sein, den du in der Methodensignatur angegeben hast.

4. Beispiele: Wir schreiben Methoden, die etwas zurückgeben

Lass uns das gleich an Beispielen anschauen! Hier ein paar typische Fälle.

Beispiel 1: Zwei Zahlen addieren

int Add(int a, int b)
{
    return a + b;
}

// Verwendung:
int result = Add(10, 20);
Console.WriteLine("Summe: " + result); // Ausgabe: Summe: 30

Beispiel 2: Persönliche Begrüßung

string CreateGreeting(string name)
{
    return "Hallo, " + name + "!";
}

// Verwendung:
string greeting = CreateGreeting("Anna");
Console.WriteLine(greeting); // Ausgabe: Hallo, Anna!

Beispiel 3: Volljährigkeit prüfen

bool IsAdult(int age)
{
    return age >= 18;
}

if (IsAdult(21))
{
    Console.WriteLine("Zutritt erlaubt.");
}
else
{
    Console.WriteLine("Sorry, nur für Erwachsene.");
}
// Ausgabe: Zutritt erlaubt.

Beispiel 4: Rückgabewert und Verwendung in Ausdrücken

Console.WriteLine("Doppelt so viel: " + MultiplyByTwo(7));

int MultiplyByTwo(int n)
{
    return n * 2;
}

5. Rückgabetyp: Vielfalt und Besonderheiten

In C# kann eine Funktion jeden „Typ“ zurückgeben (nicht nur Zahlen, Strings und so weiter). Hier ein paar Fälle:

  • Ganze Zahlen: int, long, short – easy.
  • Kommazahlen: double, float, decimal.
  • Strings: string.
  • Booleans: bool.
  • Arrays: int[], string[] usw.
  • Referenztypen: Objekte von selbst erstellten Klassen.
  • void: Spezialfall, wenn nichts zurückgegeben wird.

Warum ist der Rückgabetyp so wichtig?

Der Compiler achtet streng darauf, dass du auch wirklich das zurückgibst, was du versprochen hast. Wenn du int versprichst, aber einen String oder gar nichts zurückgibst – gibt’s einen Fehler. Wie ein strenger Chef.

Beispiel für einen Fehler:

int GetNumber()
{
    return "42"; // Fehler! Erwartet wurde int, aber du gibst string zurück.
}

6. Der Operator return ohne Wert: Für void-Methoden

Fairerweise: In Methoden mit deklariertem Rückgabetyp (z.B. int, string) muss der Operator return immer mit einem Wert verwendet werden, den du zurückgeben willst.

Aber! Wenn die Funktion mit void deklariert ist, kannst du trotzdem return ohne Wert benutzen – um die Funktion sofort zu beenden.

void PrintNumbers(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("Die Zahl darf nicht negativ sein!");
        return; // Wir verlassen einfach die Funktion, ohne etwas zurückzugeben
    }
    for (int i = 1; i <= n; i++)
    {
        Console.WriteLine(i);
    }
}
return ohne Wert in einer void-Methode

Das ist praktisch, wenn du die Funktion unter einer Bedingung abbrechen willst, aber nichts zurückgeben musst.

7. Typische Fehler beim Verwenden von return

Oh, wie oft zerbrechen sich Anfänger den Kopf über Fehler rund um return!

Problem Nr. 1: Kein return in einer Funktion, die etwas zurückgeben soll

int GetValue(bool flag)
{
    if (flag)
        return 1;
    // Ups! Was, wenn flag == false?
}
// Fehler: Nicht alle Codepfade enthalten ein return!

Lösung: Sorge immer dafür, dass return in allen Ausführungsszenarien der Funktion vorkommt! Zum Beispiel:

int GetValue(bool flag)
{
    if (flag)
        return 1;
    else
        return 0;
}

Problem Nr. 2: Rückgabetyp stimmt nicht überein

double GetMagicNumber()
{
    return 42; // Eigentlich okay (int kann implizit zu double konvertiert werden)
    // Aber wenn die Funktion int zurückgeben soll und du gibst einen String zurück – gibt’s einen Fehler!
}

Regel: Achte auf die Typkompatibilität. Wenn du unsicher bist – du kannst explizit zum gewünschten Typ casten:

return (double)42;

Problem Nr. 3: return zu früh

Denk dran: Sobald return ausgeführt wird, wird die Methode sofort beendet. Alles, was danach steht, wird nicht mehr ausgeführt!

int GetNumber()
{
    return 5;
    Console.WriteLine("Diese Zeile wird nie ausgeführt"); // Der Compiler meckert sogar!
}

Problem Nr. 4: return mit Wert in einer void-Methode (verboten!)

void PrintSomething()
{
    return 1; // Du darfst keinen Wert aus einer void-Methode zurückgeben!
}
2
Aufgabe
C# SELF, Level 8, Lektion 3
Gesperrt
Methode, die einen Begrüßungsstring zurückgibt
Methode, die einen Begrüßungsstring zurückgibt
2
Aufgabe
C# SELF, Level 8, Lektion 3
Gesperrt
Methode zur Überprüfung einer Zahl auf Gerade
Methode zur Überprüfung einer Zahl auf Gerade
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION