it-swarm.dev

Methode gegen Funktion gegen Prozedur

Einfache Frage, aber ich höre oft diese drei Begriffe, die mit solcher Wildheit definiert sind, von denen mir jedoch bekannt ist, dass sie im Laufe der Jahre verschiedene Bedeutungen haben.

Was sind die "richtigen" Definitionen von "Prozeduren", "Methoden", "Funktion", "Unterprogrammen" usw.?

113

Ich gehe hier mit einer anderen Antwort vor: praktisch gesehen es gibt wirklich keinen Unterschied, mit der kleinen Ausnahme, dass "Methode" normalerweise bezieht sich auf eine Unterroutine, die einem Objekt in OO Sprachen) zugeordnet ist.

Die Begriffe "Prozedur, Funktion, Unterprogramm, Unterprogramm und Methode" bedeuten alle dasselbe: ein aufrufbares Unterprogramm innerhalb eines größeren Programms. Es ist jedoch schwierig, eine Definition zu finden, die alle varianten Verwendungen dieser Begriffe erfasst, da sie in allen Programmiersprachen oder Paradigmen nicht einheitlich verwendet werden.

Man könnte sagen, eine Funktion gibt einen Wert zurück. Nun, die folgende C-Funktion gibt keinen Wert zurück:

void f() { return; }

... aber ich bezweifle, dass Sie jemanden finden würden, der es eine Prozedur nennen würde.

Sicher, in Pascal geben Prozeduren keine Werte zurück und Funktionen geben Werte zurück, aber das ist nur ein Spiegelbild dessen, wie Pascal entworfen wurde. In Fortran gibt eine Funktion einen Wert zurück, und eine Unterroutine gibt mehrere Werte zurück. Nichts davon erlaubt uns jedoch wirklich, eine "universelle" Definition für diese Begriffe zu finden.

Tatsächlich bezieht sich der Begriff "prozedurale Programmierung" auf eine ganze Klasse von Sprachen, einschließlich C, Fortran und Pascal, von denen nur eine tatsächlich den Begriff "Prozedur" verwendet, um etwas zu bedeuten.

Nichts davon ist wirklich konsistent. Die einzige Ausnahme ist wahrscheinlich "Methode", die fast ausschließlich mit OO Sprachen) verwendet wird und sich auf eine Funktion bezieht, die einem Objekt zugeordnet ist. Auch wenn dies nicht immer konsistent ist. C++ Beispielsweise wird normalerweise eher der Begriff "Elementfunktion" als die Methode verwendet (obwohl sich der Begriff "Methode" unter Programmierern in die C++ - Umgangssprache eingeschlichen hat.)

Der Punkt ist, nichts davon ist wirklich konsistent. Es spiegelt einfach die Terminologie wider, die von den jeweils verwendeten Sprachen verwendet wird.

109
Charles Salvia

Eine Funktion gibt einen Wert zurück, eine Prozedur jedoch nicht.

A Methode ähnelt einer Funktion, ist es aber intern zu Teil einer Klasse. Der Begriff Methode wird fast ausschließlich in der objektorientierten Programmierung verwendet.

69
Bruce Alderman

Eine Funktion ist etwas, das eine Reihe von Eingaben benötigt und einen oder mehrere Werte zurückgibt. Wenn die zurückgegebenen Werte vollständig von den Eingaben bestimmt werden und die Funktion keine Nebenwirkungen hat (möglicherweise Protokollierung oder Verursachen von Statusänderungen außerhalb von sich selbst), wird sie als reine Funktion bezeichnet.

A procedure ist eine Funktion, die keinen Wert zurückgibt. Dies bedeutet insbesondere, dass ein Eingriff nur Nebenwirkungen verursachen kann. (Dies kann das Mutieren eines Eingabeparameters beinhalten!)

A Methode ist eine Funktion, die über eine Reihe von Variablen schließt, dh a Schließung. Es benötigt null oder mehr Eingabeparameter, hat Zugriff auf diesen Variablensatz und gibt null oder mehr Werte zurück. In OO Sprachen) werden diese Methoden an Objekte oder Klassen angehängt.

In den meisten gängigen OO] Sprachen werden diese geschlossenen Variablen als Mitgliedsfelder oder Instanzvariablen eines Objekts bezeichnet. Eine Methode kann eine reine Funktion, eine unreine Funktion oder eine Prozedur sein.

Die letztere Definition führt zur Entsprechung Objekt = Struktur + Verschlüsse .

53
Frank Shearar

Bruce hat eine gute Antwort . Ich würde semantisch hinzufügen:

  • Eine Prozedur sollte etwas mit den Argumenten "tun" oder eine andere Nebenwirkung verursachen (z. B. printf).
  • Eine Funktion sollte (a) eine Frage zu den Argumenten beantworten oder (b) einen neuen Wert basierend auf den Argumenten berechnen
  • Eine Funktionsmethode sollte eine Frage zum Status des Objekts beantworten
  • Eine Prozedurmethode sollte den Status des Objekts ändern
14
Scott Whitlock

gute detaillierte Antworten oben; Die Kurzgeschichte ist, dass sie alle Geschmacksrichtungen von Unterprogrammen haben werden. Was mit jedem Begriff gemeint ist, hängt vom Kontext der Programmiersprache ab

im Allgemeinen geben Funktionen einen Wert zurück, müssen dies aber nicht

methoden sind generische OOP Begriffe derzeit

in SQL haben gespeicherte Prozeduren Ausgaben, geben jedoch normalerweise nur einen Fehlercode zurück, während benutzerdefinierte Funktionen einen Wert zurückgeben müssen (der eine Ergebnismenge sein kann).

auch hier hängt der genaue Unterschied zwischen diesen Begriffen davon ab, mit wem Sie sprechen!

4
Steven A. Lowe

80% der Kenntnisse stehen in direktem Zusammenhang mit der Vertrautheit mit der Nomenklatur.

95% der Produktivität ist die Fähigkeit, zu identifizieren, was im Moment trotz der zur Beschreibung verwendeten Begriffe nützlich ist

Ich ziehe es ziemlich vor, sie alle Methoden in c # aufzurufen, außer als ich MSSQL verwendete, hatten wir Sprocs, aber jetzt verwenden wir natürlich Postgres und sie werden Funktionen genannt.

2
MvcCmsJon