2012-04-30 32 views
9

Mögliche Duplizieren:
What is the difference between a ‘function’ and a ‘procedure’?Was ist der Unterschied zwischen einer Subroutine und einer Funktion?

Ich suchte online eine Antwort auf diese Frage, und die Antwort, die ich bekam, war, dass eine Funktion einen Wert zurückgeben kann, einen Wert ändern, usw. , aber ein Unterprogramm kann nicht. Aber ich bin mit dieser Erklärung nicht zufrieden und es scheint mir, dass der Unterschied mehr als nur eine Frage der Terminologie sein sollte.

Ich bin also auf der Suche nach einer eher konzeptionellen Antwort auf die Frage.

+0

Nicht wirklich. Das ist der einzige wichtige Unterschied. Vielleicht ein anderes ist, dass moderne Sprachen (C, Java, PHP usw.) keine Unterprogramme verwenden, sondern nur funktionieren. Ansonsten würde ich sagen, dass die technischen Details die gleichen sind: im Prinzip die 'Call'- oder' JMP'-Montageanleitung. –

+1

Siehe auch: [Was ist eine Coroutine?] (Http://stackoverflow.com/q/553704/974555) und [Was ist der Unterschied zwischen einer Methode und einer Funktion?] (Http://stackoverflow.com/) q/155609/974555) – gerrit

Antwort

23

Eine Funktion spiegelt die mathematische Definition einer Funktion wider, bei der es sich um eine Zuordnung von 1 oder mehr Eingaben zu einem Wert handelt.

Eine Subroutine ist eine allgemeine Bezeichnung für jeden Codeblock, der einen bestimmten Eingangs- und Ausgangspunkt hat.

Die genaue Bedeutung dieser Begriffe variiert jedoch von Kontext zu Kontext.


1. Offensichtlich ist dies nicht die formale mathematische Definition einer Funktion.

+0

Wow! Nun, das ist, was ich gesucht habe !! Vielen Dank! – CodeBlue

+2

Eine * true * -Funktion hat jedoch keine Nebenwirkungen. –

0

Eine Funktion muss einen Wert zurückgeben und darf keine globale Variable oder eine außerhalb des Rumpfes der Funktion deklarierte Variable ändern. In diesem Fall kann eine Funktion nur ihren mathematischen Zähler-Teil nachbilden (das Ding, das ein mathematisches Objekt auf ein anderes mathematisches Objekt abbildet).

Ein Unterprogramm gibt nichts zurück und ist normalerweise unrein, da es einen globalen Zustand ändern muss Variable sonst hat es keinen Sinn, sie aufzurufen. Es gibt keine mathematische Parallele für ein Unterprogramm.

5

Eine generische Definition der Funktion in Programmiersprachen ist ein Stück Code, der Null oder mehr Eingabewerte akzeptiert und Null oder einen Ausgabewert zurückgibt.

Die gebräuchlichste Definition von Unterroutine ist eine Funktion, die nichts zurückgibt und normalerweise nichts akzeptiert. Es ist nur ein Stück Code mit einem Namen.

Eigentlich unterscheiden sich Funktionen in den meisten Sprachen nicht in der Art, wie Sie sie deklarieren. So kann eine Subroutine eine Funktion genannt werden, aber eine Funktion, die nicht notwendigerweise eine Subroutine genannt wird.

Auch gibt es Leute, die Funktionen und Subroutinen die gleiche Sache mit einem anderen Namen betrachten.

Subroutine - Wikipedia

4

Es ist erwähnenswert, als Zusatz zu @ Oli Antwort, dass eine Funktion im mathematischen Sinne sein muss „wohldefiniert“, die ihren Ausgang eindeutig durch seine Eingaben bestimmt ist zu sagen ist, während Dies ist in Programmiersprachen oft nicht der Fall.

Diejenigen, die tun machen diese Garantie (und auch, dass ihre Funktionen keine Nebenwirkungen verursachen) werden pure functional languages genannt, ein Beispiel dafür ist Haskell.Sie haben unter anderem den Vorteil, dass ihre Funktionen in ihrem Verhalten nachweislich korrekt sind, was im Allgemeinen nicht möglich ist, wenn Funktionen auf den externen Zustand angewiesen sind und/oder Nebenwirkungen haben.