- Anonyme Subroutine
-
Anonyme Subroutine beschreibt eine Funktion eines Computerprogramms, die nicht über ihren Namen, sondern ausschließlich über Verweise (Referenzen, Zeiger, etc.) angesprochen werden kann.
Das Konzept benannter Funktionen ist aus praktisch jeder verbreiteten Programmiersprache bekannt: Eine Funktion erhält bei ihrer Definition einen eindeutigen Namen, über den man sie anschließend aufruft.
Beispiel in Perl:
# Definition und Deklaration der Funktion named. sub named ( foo, bar ) { // Tue dies. Tue das. } # Aufruf der Funktion. named( ... );
Der Name der Funktion wird vom Laufzeitsystem dazu verwendet, mit Hilfe der Symboltabelle oder eines dynamischen Verfahrens die Funktionsdefinition zu identifizieren und dort hinterlegten Code auszuführen, in kompilierten Sprachen löst prinzipiell ähnlich bereits der Linker die Namen nichtvirtueller Funktionen auf.
Mit dem Konzept der anonymen Subroutine wird es nun möglich, neben solchen benannten auch unbenannte Funktionen zu definieren.
Beispiel in Perl:
# Definition und Deklaration der Funktion. my $subref=sub {...} # Aufruf der Funktion. $subref->(...);
Da die Funktion keinen Namen mehr hat, ist ein symbolischer Aufruf nicht mehr möglich, die Routine wird vielmehr über eine Referenz, also einen Verweis auf die Definition, indirekt gestartet.
Anonyme Subroutinen können die Programmierung kontextabhängiger Funktionsaufrufe sehr stark vereinfachen. Darüber hinaus ermöglichen sie die einfache Verwendung von Funktionsreferenzen als Funktionsparameter (Übergabe eines Rückrufs (callback)) und die Speicherung in Datenstrukturen.
Beispiele in Perl:
# Führe einen Rückruf aus. doSomething(callback => sub {...}, ...); # Speichere Referenzen in einer Hashtabelle. my calls=( quick => sub {...}, clean => sub {...}, dirty => sub {...}, ... );
Das verwandte Konzept der Funktionszeiger in C oder C++ bietet prinzipiell ähnliche Möglichkeiten, ist aber aufgrund seiner Syntax und verschiedener Sonderregeln sehr viel komplizierter in der Anwendung und alles andere als intuitiv. Darüber hinaus bleiben die eigentlichen Funktionen dabei weiterhin benannt, man legt lediglich zusätzliche Verweise darauf an.
Java verwendet für diesen Zweck so genannte anonyme Inline-Klassen, oft vom Typ Runnable.
Anonyme Subroutinen werden von den meisten Skriptsprachen unterstützt, zum Beispiel Perl, Python, Lisp und - in neueren Versionen - JavaScript und JScript.
Wikimedia Foundation.