2012-04-30 19 views
9

Eventuali duplicati:
What is the difference between a ‘function’ and a ‘procedure’?Qual è la differenza tra una subroutine e una funzione?

ho cercato on-line per una risposta a questa domanda, e la risposta che ho ricevuto è stata che una funzione può restituire un valore, modificare un valore, etc. , ma una subroutine non può. Ma non sono soddisfatto di questa spiegazione e mi sembra che la differenza debba essere più di una semplice terminologia.

Quindi sto cercando una risposta più concettuale alla domanda.

+0

Non proprio. Questa è l'unica differenza importante. Forse un altro è che i linguaggi moderni (C, Java, PHP ecc.) Non usano le subroutine ma solo le funzioni. Altrimenti direi che i dettagli tecnici sono gli stessi: l'istruzione di assemblaggio 'call' o 'jmp', in pratica. –

+1

Vedere anche: [Che cos'è una coroutine?] (Http://stackoverflow.com/q/553704/974555) e [Qual è la differenza tra un metodo e una funzione?] (Http://stackoverflow.com/ q/155609/974555) – gerrit

risposta

23

Una funzione rispecchia la definizione matematica di una funzione, ovvero una mappatura da 1 o più ingressi a un valore.

Una subroutine è un termine generico per qualsiasi blocco di codice che ha un punto di ingresso e un punto di uscita definiti.

Tuttavia, il significato preciso di questi termini varia da contesto a contesto.


1. Ovviamente, questa non è la definizione matematica formale di una funzione.

+0

Wow! Questo è quello che stavo cercando !! Grazie! – CodeBlue

+2

Una funzione * true * non ha effetti collaterali, però. –

0

Una funzione deve restituire un valore e non deve modificare una variabile globale o una variabile dichiarata al di fuori del corpo della funzione. In questa situazione, una funzione può solo imitare la sua parte di contatore matematica (la cosa che mappa un oggetto matematico in un altro oggetto matematico)

Una subroutine non restituisce nulla e di solito è impura in quanto deve cambiare qualche stato globale o variabile altrimenti non ha senso chiamarlo. Non esiste un parallelo matematico per una subroutine.

5

Una definizione generica di funzione nei linguaggi di programmazione è un pezzo di codice che accetta zero o più valori di input e restituisce zero o un valore di uscita.

La definizione più comune di subroutine è una funzione che non restituisce nulla e normalmente non accetta nulla. È solo un pezzo di codice con un nome.

In realtà nella maggior parte delle lingue le funzioni non differiscono nel modo in cui le si dichiarano. Quindi una subroutine può essere chiamata una funzione, ma una funzione non necessariamente può essere chiamata una subroutine.

Inoltre ci sono persone che considerano le funzioni e le subroutine la stessa cosa con un nome diverso.

Subroutine - Wikipedia

4

Vale la pena notare come un'appendice @ risposta di Oli che in senso matematico una funzione deve essere "ben definito", vale a dire la sua uscita è univocamente determinata dai suoi ingressi, mentre questo spesso non è il caso nei linguaggi di programmazione.

Quelli che fanno rendono questa garanzia (e anche che le funzioni non causano effetti collaterali) sono chiamati pure functional languages, un esempio dei quali è Haskell.Hanno il vantaggio (tra gli altri) delle loro funzioni che sono provabilmente corrette nel loro comportamento, che generalmente non è possibile se le funzioni si basano su uno stato esterno e/o hanno effetti collaterali.

Problemi correlati