Default Function Parameter

Gestern war ein großartigen Tag, mal wieder. Ich genoss einen Mix von Sport, Entspannung und interessanten Gesprächen mit Freunden. Heute war bis jetzt auch ein guter Tag, und zu meiner Überraschung schwirrten  noch ein paar Gedanken von Gestern in meinem Kopf von Gestern. Zeit sie aufzuschreiben, das hilft Klarheit zu bekommen. Alles fing mit einem Gespräch mit einem Freund an, der auch in der IT Branche ist. Ja, Nerds unter sich. Es ging um die Frage ob man beim Programmieren im Quellcode direkt oder indirekt ausgerichtet schreiben kann. Klingt erstmal verwirrend? Ja, ich glaube deshalb habe ich das Thema noch im Kopf.

Die Frage war, wie genau man einen Sachverhalt im Quellcode beschreiben muss, auch wenn man glaubt es ist an dieser Stelle offensichtlich. Oder noch genauer gesagt, wie präzise beschreiben wir durch Funktionsparameter was unsere Absicht ist. Viele Funktionen besitzen, je nach Programmiersprache, Default Parameter. Die Frage ist nun, wann gibt man sie beim Aufruf an, auch wenn sie genau dem Default Parameter entsprechen. Auch Konstruktoren sind letzten Endes Funktionsaufrufe und sie können ebenfalls Default Parameter besitzen. Auch hier kann man sie weglassen, oder eben mit angeben. Um eine Antwort zu finden habe ich zwei unterschiedliche Perspektiven eingenommen. Für jede davon werde ich ein eigenes Kapitel in diesem Post schreiben.

Erste Perspektive: Wir schreiben Quellcode der vom Computer interpretiert wird

Ein Computer hat keine Gefühle und ist nicht verwirrt, er macht was man ihm sagt. Soweit so gut. An dieser Stelle könnte ich sagen, das wars, mehr gibt es nicht zu sagen. Wenn nicht dieses Jahr etwas interessantes mit cURL passiert wäre. Die Änderung hat nämlich den Default Parameter geändert. Die Überraschung war wirklich, dass man sowas bei einer so weit verbreitetem Werkzeug wie cURL gemacht hat. Eine Software die vorher funktioniert hat, tat es nach dem Update nicht mehr. Die Ursache war die Änderung eines Default Parameters. Ja, der Computer hat jetzt auch nur das getan was man ihm gesagt hat. Aber da wir als Nutzer von Bibliotheken und Programmen nach Updates wie diesem betroffen sein können, müssen wir darüber nachdenken. Die Frage ist ob man bei allen Updates immer die Change Note durchgehen soll, wenn es überhaupt gut dokumentierte gibt. Ich habe das Fazit gezogen, dass man für wichtige Einstellungen und Settings die Parameter setzt, selbst wenn sie die Default Parameter sind und es das nicht unbedingt braucht.

Zweite Perspektive: Wir schreiben Quellcode für uns selbst und andere Softwareentwickler

Zwischen 70 und 80 Prozent der Zeit verbringt ein Softwareentwickler mit Lesen von Quellcode. Das zumindest sagen Studien dazu, und das spiegelt ganz gut meine Praxis wieder. Man muss also davon ausgehen, dass der Quellcode gelesen wird. Hoffentlich wird er auch leicht verstanden. Als Orientierung zum Schreiben von leicht verständlichem Quellcode, gibt es die Clean Code Bewegung und zahlreiche Literatur dazu. Ein Teilelement sind dort auch die Funktionsparameter, mir geht es hier nur um Default Parameter. Er signalisiert dem Leser eine ganz explicit gewünschte Einstellung und Konfiguration. Das ist im Kontext des Quellcodes eine enorme Unterstützung für den Leser. Nicht nur sagt man was man will, sondern drückt auch aus, welche Konfiguration und Einstellungen in welcher Funktion bzw. Bibliothek vorgenommen wird. Ich habe mich schon öfter gefragt wie manche Bibliotheken manchen Dinge tun. Hätte ich die Aufrufe mit expliziten Parametern gesehen, wäre es mir so manches Mal leichter gefallen die „Magic“ zu verstehen. Wenn man Parameter setzt obwohl man nicht muss, sagt man dem Leser: Hey, an dieser Stelle habe ich darüber nachgedacht wie ich es brauche, deshalb muss es wichtig sein.

Fazit

Die Zeiten, in denen man die Größe von Quellcodedateien im Auge behalten sollte, sind lange vorbei. Die Länge einer einzelnen Quellcodedatei sollte nicht zu groß sein, sonst verliert man den Überblick. Aber ein Funktionsaufruf mit explizitem Parameter verschafft mehr, nicht weniger Klarheit. Gerade wenn man mit mehreren Personen am gleichen Quellcode arbeitet. Quellcode ist ein Kommunikationsmedium Richtung Computer und Mensch. Ich glaube wir tun gut daran, genau zu sagen was wir meinen. Auch wenn wir es nicht immer müssen.