Diskussion:Funktion (Programmierung)/Archiv/1

aus Wikipedia, der freien Enzyklopädie

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)

..nicht vergessen Funktionssignaturen (das wird in der Diskussion zu Prozedur erwähnt), überladen I (gemeint ist gleicher Funktionsname, verschiedene Paramter oder Argumente (auch dasselbe) und verschiedene Funktion) und überladen II, gemeint ist Umgang mit virtuellen Funktionen. Hier gibt es den selben Begriff für zwei was verschiedenes. Ist irgendwo erklärt wie virtuelle Funktionen (C++, Java) funktionieren? Das gehört auch hier zu diesem Thema meine ich und ist ebenfalls als Backgroundwissen wichtig! --HartmutS 00:51, 12. Feb 2006 (CET)

Ich habe den Artikel Unterprogramm im oben angegebenem Sinne überarbeitet, er ist jetzt wesentlich umfangreicher. Nach den letzten Änderungen an diesem Artikel wird hier eher der Schwerpunkt auf dem Funktionskonzept als solches gelegt, daher habe ich oben einen Begriffsverteiler eingefügt. Ich denke, dass ist im großen ganzen gut so. Ich könnte mir allerdings vorstellen, das Wissensinhalte gebündelt dargestellt werden sollen. Dann könnte dieser Artikel sehr viel kürzer ausfallen, nur Begriffsnennung und Überblick, für das Konzept der funktionale Programmierung ist der genannte Artikel da.--HartmutS 10:04, 18. Feb 2006 (CET)

Also, ich finde schon mal toll, dass anscheinend Bewegung in die Sache kommt. Ja, worum es mir eigentlich ging, ist: Die beiden Artikel (Funktion und Prozedur) haben sich nur ums Pascal-Jargon gedreht und dabei zwei nahezu identische Konzepte behandelt - unter „Funktion“ wird aber in der Informatik, wenn man es etwas allgemeiner haelt, eher eine „echte Funktion“ verstanden, als ein Ding, welches fuer einen gegebene Parameter einen Rueckgabewert liefert - und zwar immer den gleichen, egal ob Montag frueh, oder nach nem Wuerfelspielabend am Freitag, oder wenn die Welt mittwochs untergeht. „Funktionen“ im C- oder Pascal-Jargon, Prozeduren und Methoden sind aber allesamt einunddasselbe. Auch, wenn mal ein Rueckgabewert oder ein impliziter Parameter da ist, oder nicht. --FAR 21:29, 20. Feb 2006 (CET)

Sind How-Tos hier richtig?

Ich bin mir nicht sicher, ob die diversen How-Tos (wie deklariere ich eine Funktion in der Sprache XY) hier richtig sind; wäre nicht stattdessen eine „Kategorie:Funktionsdefinition“ o. ä. sinnvoll, unter der dann spezielle Artikel für die einzelnen Sprachen auftauchen könnten?

Ich war mal so frei und habe für C, Pascal, Python und Rexx ergänzt, welche Art von Informationen ich hier eher erwarten würde ;-)

Das zweite und dritte Beispiel zu PowerBasic sind außerdem m. E. erklärungsbedürftig. Steht das Suffix „%“ generell für Integer-Werte, oder könnte so eine generische Funktion erzeugt werden, die zwei Argumente gleichen Typs verarbeitet und ein Ergebnis desselben Typs zurückgibt? Erfolgt die Zuweisung an den Funktionsnamen (wie in Pascal) oder an das Schlüsselwort "Function"? Und genau hier wird es mir für diesen Artikel über Funktionen in der Programmierung eigentlich zu ausführlich.

Für den Gupta Team Developer stand da nur ein Beispiel für den Funktionsaufruf; ich habe ihn entsorgt.--Tobias 17:01, 6. Apr. 2007 (CEST)

berechtigte Kritik

Die bisher in dieser Diskussion angeführten Punkte kann ich voll unterstützen. Ich werde den Artikel in der nächsten Zeit selber mal in diesem Sinne bearbeiten. Wenn ich fertig bin, lösche ich den "überarbeiten"-tag. --Herbert Klaeren 18:46, 4. Nov. 2008 (CET)

Überarbeitungsbedarf

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)
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). (nicht signierter Beitrag von 213.47.151.120 (Diskussion) 23:36, 26. Jan. 2006 (CET))