August 20, 2011 0

Funktions- und Methodennamen

By in Best practice, C#, Designpattern, JAVA, JavaScript, PHP, VB.NET

Sich an bestimmte Regeln bei der Vergabe von Funktionsnamen zu halten, hat einige Vorteile:

  • Die Lesbarkeit wird erhöht
  • Funktionen können leichter gefunden werden
  • Fremde Programmierer finden sich schneller in Ihrem Code zurecht
  • Sie können sich bestimmte Quellcode-Kommentare sparen.

Aber wie wählt man Namen für Funktionen sinnvoll und welche Regeln gilt es zu beachten?
Ich möchte im Folgenden einen kleinen Überblick geben, wie ich dabei vorgehe.

Fangen wir ohne Umschweife an:

1. Groß-und-Kleinschreibung

Gewöhnen Sie Sich auch in Programmiersprachen, die keinen Unterschied zwischen Groß- und Kleinbuchstaben machen (wie z.B. VB.NET) an, hierauf zu achten. Es gelten die selben Regeln, wie bei der Vergabe von Variablennamen:
Beginnen Sie den Funktionsnamen mit einem Kleinbuchstaben. Starten Sie ansonsten jedes Wort im Funktionsnamen mit einem Großbuchstaben. Z.B. getPageCount.

2. Verben als Präfixe

Ich verwende die Präfixe, um auf den ersten Blick erkennen zu können, worum es in der Funktion geht. Ein weiterer Vorteil ist, dass man in Entwicklungsumgebungen, die über eine Autovervollständigung verfügen (wie z.B Visual Studio oder Eclipse), nach eingabe des Präfixes alle Optionen aus diesem Bereich angezeigt bekommt.
Die Präfixe selbst sind immer Verben im Imperativ. Wägen Sie bei der Wahl der verschiedenen Präfixe zwischen der möglichst überschaubaren Anzahl einerseits und einer möglichst ausreichenden Beschreibung der Funktion andererseits ab.
Hier die häufigsten von mir verwendeten Präfixe:

  • get – Gibt einen Wert oder ein Objekt zurück. In dieser Funktion sollten keine Berechnungen oder aufwendige Suchen stattfinden (hier lieber find, calculate, etc. verwenden)
  • set – Eine Zuweisung findet statt. Objekte werden als Referenz übergeben. Ein Rückgabewert ist nicht vorgesehen.
  • find – Eine Funktion mit diesem Präfix führt eine Suche nach einem Objekt oder einem Wert durch.
  • add – Fügt ein Objekt oder einen Wert einer Liste hinzu.
  • remove – Entfernt ein bestimmtes Objekt aus einer Objekt-internen Liste. Ich habe mich bewusst gegen delete entschieden, da dies eine Löschung des Objekts impliziert.
  • save – Speichert ein Objekt in eine Datei. Der Ausgabetyp sollte Bestandteil des Funktionsnamens sein: saveToXml
  • load – Lädt ein Objekt aus einer Datei. Sollte nur bei de-/serialisierbaren Klassen verwendet werden.
  • calculate – Führt eine Berechnung durch: Z.B. calculateAverageFileSize
  • prompt – Um zu deutlich zu machen, dass die Funktion dem Benutzer etwas anzeigt.
  • open – Zum öffnen einer (Daten-)Verbindung z.B. openConnectionToDatabase
  • close – Zum Schließen einer bestehenden Verbindung.
  • check – Eine solche Funktion wirft Fehler (Exceptions), wenn etwas nicht wie gewünscht Eingerichtet ist: Z.B. checkConnection oder checkFreeMemory. Der Terminus test wird vermieden, da ich Ihn ausschließlich fürs Debugging und für Unit-Tests verwende.

3. Die Arbeitsweise als Sufix

In zwei Fällen halte ich es für wichtig, die Arbeitsweise der Funktion ans Ende des Funktionsnamens anzuhängen:

  • recursive – Wenn eine Funktion rekursiv arbeitet, füge ich dieses Adverb hinzu
  • asynchron – Da asynchrone Funktionsaufrufe bei mir eher die Ausnahme sind, verwende ich diese Endung

Die Endung “ly”, die im englischen ein Adverb kennzeichnet spare ich mir, da sie meiner Meinung nach keine zusätzlichen Informationen bereitstellt – aber das ist Geschmackssache.

4. Die Länge des Namens

Übertreiben Sie es nicht, was die Länge des Funktionsnamens angeht. Dies vermindert die Lesbarkeit. Seien Sie aber auch nicht zu geizig, was die Anzahl der Zeichen angeht: Auf die paar Bytes kommt es auch nicht an!

Anmerkung: Auf die Frage, welche Vor- und Nachteile die Verwendung gleichnamiger Funktionen mit unterschiedlichen Parametern gegenüber unterschiedlicher Funktionsnamen hat, möchte ich an dieser Stelle nicht weiter eingehen. Vieleicht werde ich das in einem späteren Post aufarbeiten.

So, das war’s auch schon wieder. Ich hoffe, ich konnte Ihnen einen kleinen Überblick über die mir selbst auferlegten Konventionen bei der Namensvergabe geben. Für Anregungen und Korrekturen bin ich wie immer dankbar!

Leave a Reply