Facebook
Twitter
Google+
Kommentare
0

Funktionsargumente – von niladic bis polyadic und zwischendrin

Öh ja der Winter ist nun offiziell hier in der fränkischen Schweiz angekommen, das ist !schön.
Aber eigentlich wollte ich mal eine kleine Diskussionsrunde starten. Sicherlich kennen viele von euch das Buch “Clean Code” von Robert C. Martin und dem zu Folge auch seine Ausführungen über Funktionsargumente.
Für alle anderen folgt hier noch ein kurzer Abriss über den Inhalt:

The ideal number of arguments for a function is zero (niladic).

Prinzipiell wird zwischen 5 Arten unterschieden:
1. Funktionen mit keinem Argument (niladic) siehe quote von oben.
2. Funktionen mit einem Argument (monadic) was als 2t Beste Möglichkeit angesehen wird
3. Funktionen mit zwei Argumenten (dyadic) sehr nahe an monadic dran
4. Funktionen mit drei Argumenten (triadic) diese Variante sollte wenn möglich vermieden werden
5. Funktionen mit mehr als drei Argumenten (polyadic) selbst wenn mehr als 3 Argumente im speziellen Anwendungsfall berechtigt oder angebracht sind, sollte es dennoch gänzlich vermieden werden.

Als Gründe gegen mehr Funktionsargumente, führt Martin, zum einen an, dass diese auf einer anderen Abstraktionsebene liegen können, als der eigentliche Funktionsname und man somit gezwungen wird, mehr über die eigentliche Funktion zu wissen als man zu dem Zeitpunkt des Aufrufs wissen muss.
Als Beispiel rufen wir uns die Funktion “shorten()” unserer Bitly Klasse ins Gedächtnis ;) diese erwartet nur ein Argument als Übergabeparameter und zwar die Url die es zu kürzen gilt. Doof wäre es jetzt wenn diese zusätzlich die Instanz eines Zend_Http_Clients erwarten würde um überhaupt die URL kürzen zu können, jaja ich weiß doofes Beispiel aber Übertreibung veranschaulicht.
Zum anderen führt er die Schwierigkeiten beim testen einer Funktion mit vielen Funktionsargumenten an, da man hier zusätzlich eine Reihe von Testfällen schreiben müsste, um sicherzustellen, dass die unterschiedlichen Kombinationen der Parameter auch richtig funktionieren.
Des weiteren fördert eine lange Übergabeliste nicht unbedingt die Lesbarkeit des Codes.

Da wir jetzt wissen, dass Punkt 4. und 5. eher auf der dunklen Seite der Macht anzusiedeln sind und lt. Martin als bad practises angesehen werden, möchte ich gerne wissen wie ihr es so mit euren Funktionsargumenten haltet und wie eure Meinung bzgl. der Ausführungen von Martin sind.

Ist die ganze Geschichte eine Glaubensfrage? eher Kontextabhängig? dogmatisches Gesetz? seid ihr eher Fans von argument objects? option arrays?

Über den Autor

devtalk

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen