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!");
}
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
}
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
}
Beispiele für verschiedene Signaturen:
| Signatur | Was wird zurückgegeben |
|---|---|
|
Ganze Zahl |
|
String |
|
Kommazahl |
|
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;
}
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);
}
}
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!
}
GO TO FULL VERSION