Verschiedene Rückgabedatentypen in einer Funktion und Fehlerbehandlung

30/07/2012 - 10:23 von Tim Erzmann | Report spam
Hallo zusammen,

im Moment stehe ich öfters vor der Wahl, innerhalb einer Funktion einen,
oder mehrere Datentypen als Rückgabewert zu definieren. Gibt es dafür
eine allgemeine Regel? Auch was das damit verbundene Verhalten in
Fehlerfàllen betrifft? Diesbezüglich habe ich mir ein paar Gedanken
gemacht und würde dazu gerne ein paar Meinungen hören.

Ich habe dazu ein einfaches Beispiel vorbereitet, über dessen
Sinnhaftigkeit hier jetzt nicht diskutiert werden soll. Es soll
lediglich mein Anliegen verdeutlichen.

<?php

/**
* @param $intParam - ...
* @param $intParam2 - ...
*
* @return (bool) - ...
* @return (int) - ...
*
**/

function addiere1 ($intParam, $intParam2) {

if (!is_int($intParam) || !is_int($intParam2))
return false;

if (0 > count($intParam))
return false;

return $intParam + $intParam2;

}

/**
* @param $intParam - ...
* @param $intParam2 - ...
*
* @return (bool) - ...
*
**/

function addiere2 ($intParam, $intParam2) {

if (!is_int($intParam) || !is_int($intParam2))
return 1;

if (0 > count($intParam))
return 2;

return $intParam + $intParam2;

}

?>

Ich gebe in der ersten Version der Funktion
addiere($intParam, $intParam2) zwei verschiedene Rückgabewerte zurück.
Im Fehlerfall false und bei Erfolg die Summe der Parameter. In Version 2
gebe ich nur Werte vom gleichen Datentyp zurück.

addiere1:

Vorteile : -

Nachteile:
- Im Fall eines Fehler kann nicht unterschieden werden, welcher Wàchter
den Fehler ausgelöst hat
- Eine Zeile mehr in der Dokumentation
- Es muss extra unterscheiden werden zwischen den verschiedenen
Rückgabetypen

addiere2:

Vorteile :
- Es kann eine genaue Fehlerbeschreibung ausgegeben werden
- Eine Zeile weniger in der Dokumentation
- Definierte Fehler können in mehreren Funktionen als Rückgabewerte
genutzt werden

Nachteile:
- Die Fehler müssen irgendwo hinterlegt werden
- Je umfangreicher das Programm wird, desto besser muss man aufpassen,
dass man immer den korrekten Wert zurückgibt

- Ich vermute es kommt immer auf den Anwendungsfall an:
Bei einer Funktion existiertDatei() erwartet man eher true/false,
als bei der Funkton validiereNutzerEingaben()

Wie siehts es mit der Fehlerbehandlung aus? Würde man dies elegant mit
Exceptions, try/catch lösen? Oder ist es einfach nur eine
Geschmacksfrage, ob ich nicht doch beispielsweise in einem Array meine
Fehlerocdes hinterlege und diese dann ggf. ausgebe?

Viele Grüße,
Tim Erzmann
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
30/07/2012 - 10:31 | Warnen spam
Tim Erzmann wrote:

function addiere1 ($intParam, $intParam2) {

if (!is_int($intParam) || !is_int($intParam2))
return false;

if (0 > count($intParam))
return false;

return $intParam + $intParam2;

}

[…]
function addiere2 ($intParam, $intParam2) {

if (!is_int($intParam) || !is_int($intParam2))
return 1;

if (0 > count($intParam))
return 2;

return $intParam + $intParam2;

}

?>

[…]
- Ich vermute es kommt immer auf den Anwendungsfall an:
Bei einer Funktion existiertDatei() erwartet man eher true/false,
als bei der Funkton validiereNutzerEingaben()



Ich erwartete in beiden Fàllen einen Wahrheitswert.

Wie siehts es mit der Fehlerbehandlung aus? Würde man dies elegant mit
Exceptions, try/catch lösen?



Ja.

Oder ist es einfach nur eine Geschmacksfrage, ob ich nicht doch
beispielsweise in einem Array meine Fehlerocdes hinterlege und diese dann
ggf. ausgebe?



Nein, denn wie Du bereits erkannt hast, erzeugt das mehr Probleme, als es
löst.

PointedEars

Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Ähnliche fragen