Was sind die spezifischen Bedeutungen der Begriffe: Funktionen, Methoden, Prozeduren und Unterprogramme?

11

Ich frage mich, was die spezifischen Unterschiede in der Terminologie sind, die wir zum Gruppieren verwandter Codeteile verwenden. Ich habe manchmal gesehen, dass die Begriffe synonym verwendet wurden: Viele OO-Sprachen verwenden sogar das Schlüsselwort "Funktion", um eine Methode zu definieren. (Warum?)

Wenn Sie genau sein wollten, was sind die spezifischen Bedeutungen von jedem? Oder ist es einfach so, wie jede Sprache es nennt?

Andrew Vit
quelle
Die einzigen zwei Sprachen, die mir bekannt sind, functionsind JavaScript und PHP. Beide verwenden dasselbe Schlüsselwort für Nicht-Methoden (freie Funktionen), und bei JavaScript wird nicht wirklich zwischen Funktionen und Methoden unterschieden, zumindest nicht auf Sprachebene.
Beispiele: In VB.Net Subist ein FunctionWert ohne Rückgabewert. In können PythonSie eine Funktion haben, die nicht Teil einer Klasse ist, also keine Methode. Sie können Funktionen auch innerhalb von Funktionen deklarieren, und dies können Sie auch in C # tun. Manchmal haben sie unterschiedliche Namen aus demselben Grund wie Äpfel und Ananas: weil sie unterschiedlich sind.
Job
Was haben Sie bisher gefunden, das Sie glauben lässt, dass es eine Diskrepanz gibt?
JeffO

Antworten:

20
  • Unterprogramm, Unterprogramm
    "Unterprogramm" stammt wahrscheinlich aus der Assemblersprache. Einige Prozessoren enthalten Anweisungen zur Unterstützung von Unterprogrammen, um Code zu organisieren und allgemeine Codeabschnitte wiederzuverwenden. Zum Beispiel hatte der 6502-Prozessor JSR- (Sprung zum Unterprogramm) und RTS- (Rückkehr vom Unterprogramm) Anweisungen. Ich erinnere mich, dass es auch häufig in der strukturierten Programmierung verwendet wird, in der ein Programm eine Hierarchie von Codeeinheiten ist, die manchmal als Unterprogramme oder Unterprogramme bezeichnet wurden. IMO, dies sind die allgemeinsten Begriffe für eine Codeeinheit, auf die die Steuerung vorübergehend übertragen wird, um eine bestimmte Aufgabe zu erledigen.

  • Funktion, Prozedur
    Diese werden oft synonym verwendet, aber in einigen Sprachen gibt es einen Unterschied. In Pascal ist eine Funktion ein Unterprogramm, das einen Wert zurückgibt, während eine Prozedur ein Unterprogramm ist, das dies nicht tut. In C und verwandten Sprachen hat jedes Unterprogramm einen Rückgabetyp (auch wenn dies der Fall ist void), daher gibt es keinen Unterschied.

  • Methode, Elementfunktion
    Dies sind zwei Namen für dasselbe Objekt - im Wesentlichen eine Funktion, die einer bestimmten Klasse oder einem bestimmten Objekt zugeordnet ist.

  • Operator
    Jede Sprache verfügt über eine Reihe integrierter Operatoren. In einigen Sprachen, wie z. B. C ++, sind Operatoren Funktionen, die überschrieben (dh ersetzt) ​​und / oder überladen (dh für neue Typen definiert) werden können.

  • anonyme Funktion
    Dies bezieht sich auf eine Funktion ohne Namen. Anonyme Funktionen sind im Wesentlichen Codeblöcke, die Variablen zugewiesen oder als Parameter für die spätere Verwendung übergeben werden können, beispielsweise als Abschlussroutine.

  • Closure, Lambda-Ausdruck, Block
    Ein Closure ist ein Codeabschnitt, der an eine Reihe von Variablen gebunden ist. Ich stelle mir Schließungen als anonyme Funktionen plus Kontext vor.

Caleb
quelle
4
Nicht alle Sprachen verfügen über integrierte Operatoren. Einige, wie Scheme und Haskell, lassen Sie einfach Funktionen mit Namen wie '+' oder '>> =' definieren. Außerdem sollten Sie wahrscheinlich hinzufügen, dass in einigen Sprachen (wie z. B. Schema) "Funktion" referenzielle Transparenz impliziert (z. B. wird immer derselbe Wert für dieselbe Eingabe ohne Nebenwirkungen zurückgegeben), während die Prozedur dies nicht tut. Ansonsten tolle Antwort.
Tikhon Jelvis
Bisher kann ich mich erinnern, dass "Operatoren" hauptsächlich für Funktionen mit 2 Argumenten verwendet wurden. Sie waren Infix (Operator zwischen Argumenten :) 2 + 2. Es gibt kleine Ausnahmen wie 1-arg wie ++arg(Präfix) oder arg++(Postfix). Obwohl ich nicht viele Postfix-Operatoren gesehen habe ..
Darek Nędza
-1

Es hängt von den Sprachen ab, was Sie damit machen können

  • Benötigen Sie eine Unterscheidung?
  • Gibt es einen Unterschied in der Syntax oder ist es nur Bequemlichkeit, wenn es um Code geht?

AFAIK, in Basic, wenn Sie etwas aufrufen, das nichts zurückgibt, aber einen Job mit Nebenwirkungen wie Drucken, Schreiben in eine Datei oder Ändern einer globalen Variablen ausführt, wurde dies als Prozedur bezeichnet.

Wenn es etwas zurückgibt, wurde es eine Funktion genannt.

In einer OOP-Sprache wie Java traf ich selten den Begriff "Funktion", sondern "Methode", und es wurde gelehrt, dass Funktionen Dinge sind, die global sind und von jedem aufgerufen werden können.

In der Funktions- und OOP-Sprache wird eine Methode nicht als Funktion bezeichnet, aber Sie können so etwas an eine andere Methode übergeben, und dann wird sie zu einer Funktion.

Eine Unterroutine ist nach meinem Verständnis eine Routine, die von einer anderen Routine aufgerufen wird.

Zusammenfassend glaube ich nicht, dass es eine präzise Definition für alle Sprachen und mehr noch für Paradigmen gibt. Wenn Sie diese Begriffe verwenden, müssen Sie die spezifische Kultur berücksichtigen, in der Sie sich befinden. Vielleicht sollten Sie zuerst Ihre Definition einführen.

Benutzer unbekannt
quelle
-1

Ich würde sagen, je nach Kontext könnten all diese Wörter dasselbe oder ganz andere Dinge bedeuten, zum Beispiel was Caleb geschrieben hat (aber es gibt noch mehr, dh Sprachen, in denen Operatoren erstklassige Funktionen usw. sind). Es ist daher schwierig, eine bestimmte Definition zu geben, und es ist ratsam, nicht zu viel anzunehmen, es sei denn, der Kontext (Programmiersprache) ist bekannt.

AnoE
quelle