Schall und Rauch: Wie findet man den bestmöglichen Namen für eine Funktion?

Babel-Bulletin  –  29 Kommentare

Unbestritten sagt ein guter Name sicherlich mehr als tausend Worte Dokumentation. Allerdings stellt sich oft heraus, dass die Wahl eines Namens gar nicht so einfach ist. Grund genug, sich einmal experimentell damit zu beschäftigen.

Die Motivation

Immer wieder treffe ich auf Softwareentwickler, die meinen, dass ein guter Name jeden weiteren Kommentar überflüssig macht. Dabei werden dann auch gerne mehr oder weniger bekannte Größen aus unserer Branche zitiert, die eine derartige Empfehlung ausgesprochen haben wollen.

Ja, ein guter Name erlaubt im Idealfall, dass ein Code-Fragment ohne die Dokumentation verstanden wird. Aber man sollte auch bei den vermeintlich einfachsten Beispielen Vorsicht walten lassen. Ein Beispiel, dass mir bei derartigen Diskussionen immer wieder über den Weg läuft, ist

Date getBirthday()

Angeblich benötigt diese Methode bei einem Person-Objekt keine weitere Erläuterung. Ungeachtet dessen, ob eine solch einfache (um nicht zu sagen triviale) Methode in der Objektorientierung überhaupt eine Existenzberechtigung hat, kann man der Signatur nicht ansehen, ob die Methode nicht vielleicht auch null liefern kann. Selbst bei Sprachen, die eine null implizit ausschließen, kann man nicht erkennen, ob es nicht ein bestimmtes Datum gibt, das einem unbestimmten Geburtstag entspricht.

Ganz unabhängig davon, kann es ganz interessant sein, ob es sich bei dem Geburtstag um den echten, möglicherweise verifizierten Geburtstag der Person handelt oder einfach um ein Datum, das ein Benutzer zu (seinen eigenen) Identifikationszwecken angeben darf. Sich die Implementierung anzusehen, um solche Möglichkeiten auszuschließen, ist allerdings nicht akzeptabel. Und das nicht nur, weil man diese Eigenschaft dem Code gar nicht entnehmen kann, sondern auch deswegen, weil ja der Zugriff auf die Quellen oft gar nicht sicher gewährleistet werden kann – und sei es auch nur deswegen, weil der Nutzer nicht in der Lage ist, die Quellen mit der Bibliothek zu verknüpfen.

Nichtsdestoweniger ist getBirthday vermutlich der bestmögliche Name, da alle Namenszusätze den Namen nur verlängern würden, ohne dass sie mehr Klarheit schaffen könnten. Ein guter Name kann also nur versuchen, dem Leser eine möglichst eindeutige Idee davon zu vermitteln, um was es sich bei der Methode oder Klasse handeln könnte.

Aber auch das ist gar nicht so einfach, stehen einem doch allzu viele scheinbar gleichwertige Namen zur Verfügung. Wird ein Element aus einem Container entfernt oder gelöscht? Wird ein Byte aus einem Dateistrom gelesen, wird diese dann aus dem Strom entfernt? Bedeutet dies, dass ein Lesen eines Elements in einem Container dieses auch entfernt? Ist ein Byte-Strom eigentlich auch ein Container? Und ist ein Container nur ein anderer Name für Collection?

Das Experiment

Wie aber findet man nun den bestmöglichen Namen für eine Funktion? Wie erreicht man, dass auch ein seltener Nutzer eine möglichst genaue Vorstellung davon bekommt, was eine Funktion vermutlich macht?

Deshalb möchte ich eine kleine Umfrage machen. Nur drei Fragen beschäftigen sich mit der Benennung von drei verschiedenen Funktionen, mit deren Hilfe man auf einzelne Bits oder Bit-Gruppen zugreifen möchte. Die Wahl fiel auf den Bereich der Bit-Manipulation, weil dort (hoffentlich) am wenigsten zu erklären ist.

Um es gleich vorwegzunehmen: Es geht bei den Funktionen nicht darum, ob sie einen offensichtlichen Nutzen haben (es genügt zu wissen, dass sie für bestimmte Anwendungsfälle ausgesprochen nützlich sind). Es geht nur darum, ob man der Funktionalität einen Namen zuordnen kann, unter dem man sich etwas vorstellen kann. Und dann geht es natürlich noch darum, wie viele sich unter diesem Namen dasselbe vorstellen.

Die kleine Umfrage findet sich unter https://www.surveymonkey.de/r/QTXBR2T. An der Umfrage kann man bis zum Sonntag, den 18. Juni 2017, 24 Uhr, teilnehmen. Die Ergebnisse der Umfrage werden dann hier Anfang Juli veröffentlicht.

Das Beantworten der drei Fragen sollte übrigens kaum länger als fünf Minuten dauern. Ich würde mich darüber freuen, wenn so viele wie möglich – unabhängig von ihrer Lieblingsprogrammiersprache – an der Umfrage teilnehmen, damit das Ergebnis möglichst aussagekräftig ist. Ich für meinen Teil bin auf jeden Fall schon gespannt.

PS: Wer öffentliche Bemerkungen zu den Fragen machen will, kann das – wie immer – hier machen. Wer jene nicht öffentlich machen möchte, der kann sie an die E-Mail-Adresse umfrage-schall-und-rauch@gmx.de verschicken.