Variadische Funktion

Variadische Funktion

Als variadische Funktion bezeichnet man in Programmiersprachen Funktionen, Prozeduren oder Methoden mit unbestimmter Arität, also solche, deren Parameteranzahl nicht bereits in ihrer Deklaration festgelegt ist. In einigen Sprachen wie C, C++ und Java wird dies in der Funktionsdeklaration mit Auslassungspunkten angezeigt, der sogenannten Ellipse. An Stelle der Ellipse können beliebig viele Argumente (oder auch keine) übergeben werden. Nützlich sind variadische Funktionen beispielsweise bei der Verknüpfung mehrerer Zeichenketten oder beim Aufsummieren von Zahlenreihen und generell bei Operationen, die prinzipiell auf eine beliebige Anzahl Operanden angewandt werden können.

Inhaltsverzeichnis

Umsetzung in verschiedenen Programmiersprachen

C und C++

Der Zugriff auf variadische Parameter erfolgt hier über spezielle Makros.[1] Einige Bibliotheksfunktionen von C sind mit Ellipse deklariert, da es in C keine Möglichkeit der Funktionsüberladung gibt, Beispiele sind die Bibliotheksfunktionen printf und scanf zur formatierten Aus- beziehungsweise Eingabe.[2] Ein grundlegendes Problem bei diesem Mechanismus ist, dass zur Laufzeit keine Information über Anzahl und Typ der übergebenen Argumente zur Verfügung steht. Der Programmierer muss also durch zusätzliche Maßnahmen (wie etwa mit dem format string bei printf) sicherstellen, dass die Argumente richtig interpretiert werden und nicht mehr Argumente verarbeitet werden, als tatsächlich vorhanden waren. Außerdem muss mindestens ein fester Parameter vor der Ellipse angegeben werden.

In C++ gelten Ellipsen heutzutage als überholt, da C++ elegantere Möglichkeiten zur Funktionsüberladung und das Konzept der Defaultargumente bietet, und als schlechter Stil, da sie keine Typsicherheit bieten.[3] Sie sind jedoch die einzige Möglichkeit, eine nahezu unbegrenzte Anzahl an Argumenten zu übergeben.

Java

Auch in Java verwendet man in der Deklaration die Ellipse. Hier spricht man von Methoden mit variabler Argumentanzahl, oder kurz Varargs.[4] Im Gegensatz zu C und C++ wird aber der Typ mit angegeben. Im Hintergrund wird die Parameterliste in ein Array übersetzt, so dass auch innerhalb des Funktionsrumpfes der Parameter wie ein Array behandelt werden muss.[5]

PHP

PHP unterstützt erst ab Version 4 variadische Funktionen, frühere Versionen von PHP boten keinen derartigen Mechanismus. Es wird kein besonderes Kennzeichen in der Funktionsdeklaration verwendet. Die Argumente können mit Hilfe spezieller Funktionen ausgewertet werden.[6]

Ruby

In Ruby werden variable Argumentanzahlen durch einen Stern vor dem Parameternamen gekennzeichnet.[7] Auch hier wird dieser Parameter als ein Array behandelt, in dem alle Argumente gesammelt werden, die der vorgegeben Anzahl an Argumenten folgen.

Python

Python bietet dieselbe Funktionalität wie Ruby. Darüber hinaus kann man überzählige Argumente benennen und deren Namen zusammen mit dem Wert in einer Tabelle („Wörterbuch“ im Python-Jargon) speichern, wenn Parameternamen zwei Sterne vorangestellt sind.[8]

Haskell

Haskell erlaubt es nicht direkt, variable Argumentanzahlen zu verwenden, allerdings kann man dies über trickreiche Verwendung von Typklassen nahezu beliebig nachbilden. (So sind mit einer entsprechenden Implementation z.B. auch typsichere variadische Funktionen mit verschiedenen Argumenttypen möglich).[9][10]

Siehe auch

Einzelnachweise

  1. Variable Argumentlisten in C. Abgerufen am 9. September 2010.
  2. Definition von printf. Abgerufen am 9. September 2010 (englisch).
  3. Ellipses (and why to avoid them). Abgerufen am 9. September 2010 (englisch).
  4. Varargs in Java. Abgerufen am 1. September 2011.
  5. Varargs in Java im Sprachüberblick auf oracle.com. Abgerufen am 1. September 2011 (englisch).
  6. Variadische Funktionen in PHP. Abgerufen am 9. September 2010.
  7. David Thomas, Andrew Hunt: Programmieren mit Ruby. Addison-Wesley, München 2002, ISBN 3-8273-1965-X, S. 281 (Eingeschränkte Vorschau in der Google Buchsuche).
  8. Abschnitt Function Definition in der Python-Schnellübersicht. Abgerufen am 9. September 2010 (englisch).
  9. Implementierung in Haskell mit detaillierter Beschreibung. Abgerufen am 12. August 2010 (englisch).
  10. Beschreibung des Vorgehen bei der Haskell-Variante von printf zur Erzeugung einer polyvariadischen Funktion. Abgerufen am 12. August 2010 (englisch).

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • C-Präprozessor — Der C Präprozessor (cpp, auch C Precompiler) ist der Präprozessor der Programmiersprache C. In vielen Implementierungen ist er ein eigenständiges Computerprogramm, das durch den Compiler als erster Schritt der Übersetzung aufgerufen wird. Der… …   Deutsch Wikipedia

  • Ellipse (Begriffsklärung) — Die Ellipse rsp. die Ellipsis (griechisch: ἔλλειψις élleipsis = „Fehlen“, „Aussparung“, „Auslassung“ [insbesondere inmitten von etwas]) bezeichnet: in der Geometrie eine zu den Kegelschnitten gehörige Kurve, siehe Ellipse in der Linguistik und… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”