Diskussion:Funktion (Programmierung)
Ich sehe Ueberarbeitungsbedarf bei diesem Artikel, sowie beim Artikel Prozedur (Programmierung). Grund: Meines Erachtens wird hier die - wenn ich mich nicht irre - aus Pascal stammende Terminologie verwendet und als ein umgreifenderen Konzept dargestellt, waehrend eine andere wichtige Unterscheidung unter den Teppich gekehrt wird: Naemlich die zwischen Funktionen im Sinne der funktionalen Programmierung und Prozeduren im Sinne der imperativen Programmierung. Am besten Liste ich mal die moeglichen Bedeutungen der Begriffe auf, damit man sich ein Bild ueber das Dilemma machen und die weitere Verfahrensweise klaeren kann:
- Funktion
- 1.
- a) eine Abbildung im Sinne der Mathematik, welche jedem Element einer Urmenge genau ein Element einer Bildmenge zuweist (dass selbst hier der Begriff nicht immer einheitlich ist, erspar ich uns mal, traegt hier aber gluecklicherweise auch nicht mehr viel zur Sache bei)
- b) eine Abbildung nach Vorbild von Funktion (1a) in einer Porgrammiersprache, speziell einer funktionalen Programmiersprache
- 2. eine bestimmte Sorte von Objekten in einer (abtrakten) Maschine fuer funktionale Programmiersprachen, meist abgeleitet aus einer Funktion (1b) oder deren Anwendung
- 3.
- a) (Pascal-Jargon) eine Prozedur (1), die keine Prozedur (3) ist
- b) (C-Jargon) eine Prozedur (1) (oder bisweilen auch eine Methode)
- 1.
- Prozedur
- 1. eine Subroutine, besonders in der imperativen Programmierung
- 2. („Prozedur-Aufruf“, „Prozedur-Segment“) ein Teil der Auswertungsmethodik eines Programms auf einer (abstrakten) Maschine fuer imperative Programmiersprachen (z.B. P-Code), meist abgeleitet aus einer Subroutine (1)
- 3. (Pascal-Jargon) eine Subroutine, die keinen Rueckgabewert hat
Ihr seht also: Das ganze Ding hat ein bisschen was von Brechts „Kritiker -> X -> U -> Kritiker“ (Ich moechte fast Wetten, irgendwer findet noch eine weitere Definition von Prozedur, die auf einen Definitionspunkt von Funktion zurueckgreift... *g*) Und eben deshalb bin ich mit dem derzeitigen Stand ein wenig ungluecklich. Versteht uebrigens das „Pascal-Jargon“ und „C-Jargon“ nicht falsch: Ich habe nichts dagegen, diese Begriffe zu verwenden, und beide Idiome sind definitiv schon ueber die Gemeinde der jeweiligen Programmierer hinausgewachsen (es gibt z.B. Leute, die ausschlieszlich Java koennen, aber dennoch Pascal- oder C-Sprechweise verwenden). Ich finde es nur wichtig, dass in der Wikipedia eben etwas genauer drauf geschaut wird - technisch gesehen laufen zum Bespiel Prozeduren (3) und Funktionen (3a) gleich ab, waehrend Funktionen (1b) und Funktionen (3b) herzlich wenig miteinander gemein haben. --FAR 08:39, 7. Dez 2005 (CET)
Ad 3)a): in Pascal ist eine Funktion eine Prozedur, die einen Wert zurückliefert.
Ich stimme zu, dass man, wenn man eine Unterscheidung trifft, angeben sollte, auf welcher Grundlage man das tut (also explizit angeben, dass diese Unterscheidung in Pascal getroffen wird).
Ansonsten ist das ganze ziemliche Wortklauberei. In C sind die Pascal-Prozeduren einfach Funktionen, die nichts (void) zurückliefern. Eine einleuchtende Sichtweise und darüber hinaus einfacher. In Java werden Funktionen als Methoden bezeichnet, um die Zugehörigkeit zu einem Objekt zu betonen. Gut, nett und alles, ändert aber nichts daran, dass sie wie Funktionen aufgebaut sind und letztlich im Speicher (fast) genauso behandelt werden.
In Perl heißt dasselbe dann sub (von Subroutine). (??Unterschrift fehlt)
Ein Artikel für Funktion, Prozedur, Unterprogramm, Subroutine, Methode
Ich kenne PASCAL, C/C++, Java und Assembler und muss bestätigen, dass es keinen essentiellen Unterschied gibt zwischen Funktion wie hier beschrieben, Prozedur_(Programmierung), Objektorientierte_Programmierung#Methoden und Unterprogramm oder auch Subroutine. Das sind alles verschiedene Begriffe für ein und dieselbe Sache, die sich in Nuancen unterscheiden:
- Rückgabewert oder nicht machte bei älteren Programmiersprachen (Pascal?) einen Unterschied zwischen Funktion und Prozedur, bei C hieß dann alles Funktion.
- In Assembler heißt das Subroutine, weil aus Sicht der Befehlsabarbeitung.
- Methode ist im Hinblick darauf gemeint, dass es die Möglichkeit der Datenveränderung ist. Realisierungstechnisch ist bei einer nichtstatischen Methode im wesentlichen der this-Zeiger zusätzlich übergeben (implizit, aufgrund der Benennung der Dateninstanz). Methode als Begriff bei der Objektorientierte_Programmierung ist aber in diesem Artikel richtig aufgehangen. Übrigens, beim UML-Tool Rhapsody wird steht statt Methode in den entsprechenden Bedienmenüs Operation, jeder Toolhersteller will ja was Eigenes beitragen!
Es könnte sehr informatorisch für den Leser sein, wie eine Methode, Funktion, Prozedur und wie das alles so heißt auf Assembler/Maschinenebene heruntergebrochen wird, also wie was wirklich abgearbeitet wird und wie es funktioniert. Da gibt es so viel eigentlich auch nicht zu sagen, (Stack-übergabe usw) aber als Backgroundwissen auch ggf für den Normalprogrammierer manchmal nützlich, z.B. die Frage Wie funktioniert es, wenn eine Funktion eine Struktur per Value zurückgibt?, das geht in C/C++ und ist auch zuweilen nützlich. Wie erfolgt eine optimale Bearbeitung. call by reference/value.
Also, ein Artikel, redirect dahin, alle Begriffe von ihrer Benutzung und Herkunft klären und dann die Sache etwas ausführlicher und gegliedert darstellen, das wäre was. Wenn ich Zeit hätte, würd ichs machen. mfG --HartmutS 00:41, 12. Feb 2006 (CET)