# Mehrere Rückgabewerte



## Beni (31. Dez 2004)

Ich habe eine Methode die sollte eigentlich mehrere Rückgabewerte haben: ein boolean und ein String (Die Methode wird in einem Parser benötigt, um zu bestimmen ob eine Operation ("+", "-", "sin", ...) die korrekten Eingabewerte bekommen wird, der String ist eine potentielle Fehlermeldung, der boolean die Angabe ob ein Fehler auftreten kann).

Jetzt sehe ich 3 Möglichkeiten:

1. Ich gebe nur den String zurück, und wenn er "null" ist, wird das als "false" angenommen.
2. Ich mache eine kleine Datenstruktur, welche beide Werte enthält, die aufwändigste Variante.
3. Ich übergebe der Methode eine kleine Datenstruktur, in die sie den String hineinschreiben kann (so eine Art Pointer).

Welche Variante ist da am saubersten? Ich muss dazu noch sagen, dass diese Methode etwa 50 mal implementiert werden muss... möchte die Arbeit nicht zweimal machen.

Gruss Beni


----------



## Roar (31. Dez 2004)

öööh gib doch einfach n objekt einer klasse zurück mit methoden getOperation() und isValid() oder so...


----------



## bygones (1. Jan 2005)

oder schreib eine generische Tupel Klasse die zwei versch. Typen speichern kann..

wenn der String die Fehlermeldung ist halte ich die erste möglichkeit für unproblematisch. Ist er null so heißt es einfach : "Kein Fehler" ansonsten halt der zurückgegebene Fehler


----------



## Beni (1. Jan 2005)

Hm, so ein Tuple macht grausam viel Schreibarbeit...

```
Tuple<Boolean, String> tuple = new Tuple<Boolean, String>( false, "Weil dies und das" );
```

Ich machs glaub einfach ohne Fehlerausgabe :bae: (naja nochmal drüber schlafen), aber jedenfalls danke euch für die Ratschläge.


----------



## bygones (1. Jan 2005)

TupelKlasse war auch mehr zum Spaß 

wie gesagt - ich würde 1. Möglichkeit nehmen


----------



## Bleiglanz (3. Jan 2005)

machs void mit einer selbst geschriebenen Exception?


----------



## Beni (3. Jan 2005)

Kontrollfluss über Exceptions? Brrrr, da überkommt mich ein kalter Schauer :wink:

Aber die Exception als Rückgabewert (anstelle des Stringes), darauf bringst du mich, und das wär irgendwie ein praktischer Kompromiss von allem.


----------



## Bleiglanz (3. Jan 2005)

Es geht ja nicht um den Kontrollfluss, würde ich eher in einer Linie
mit IllegalArgument oder Numberformat Exception sehen

wenn du eine mathematische Formel auswerten willst, dann ist es doch eh egal, wo der Fehler fliegt, du kannst das ja per Programmierung nicht korrigieren?

die Methode mit void ist auf jeden Fall viel einfacher anzuwenden!?

Oder willst du wirklich bei jedem Aufruf einen boolean testen, und wenn false dann einen String an den User geben - da ist es doch viel einfachen, einen grossen try{ um den parse-vorgang zu legen...


----------



## Beni (3. Jan 2005)

Mein Parser probiert verschiedene Reihenfolgen von Operationen durch, bevor er endgültig aufgibt, deshalb ist das wilde herumwerfen von Exceptions nicht so dolle :wink:

Naja, ein kleines "if" macht den Braten nicht heiss, oder wie geht das Sprichwort gleich wieder?


----------

