Qual è la differenza tra una “funzione” e una “procedura”?

In generale, tutti noi sentiamo parlare delle funzioni o delle procedure nei linguaggi di programmazione. Tuttavia, ho appena scoperto che uso questi termini quasi in modo intercambiabile (che probabilmente è molto sbagliato).

Quindi, la mia domanda è:

Qual è la differenza in termini di funzionalità, scopo e utilizzo?

Un esempio sarebbe apprezzato.

Una funzione restituisce un valore e una procedura esegue solo i comandi.

La funzione del nome deriva dalla matematica. Viene utilizzato per calcolare un valore in base all’input.

Una procedura è un insieme di comandi che possono essere eseguiti in ordine.

Nella maggior parte dei linguaggi di programmazione, anche le funzioni possono avere una serie di comandi. Quindi la differenza è solo nella restituzione di una parte di valore.

Ma se ti piace mantenere una funzione pulita, (basta guardare le lingue funzionali), devi assicurarti che una funzione non abbia un effetto collaterale.

Questo dipende dal contesto.

Nei linguaggi di tipo Pascal, le funzioni e le procedure sono entity framework distinte, che differiscono nel fatto che restituiscano o meno un valore. Si comportano diversamente. la syntax del linguaggio (ad esempio procedura chiama le istruzioni del modulo, non è ansible utilizzare una chiamata di procedura all’interno di un’espressione e le chiamate di funzione non formano istruzioni, è necessario utilizzarle in altre istruzioni). Pertanto, i programmatori Pascal differenziano tra loro.

Nelle lingue simili a C e in molti altri linguaggi contemporanei, questa distinzione è sparita; nelle lingue tipizzate staticamente, le procedure sono solo funzioni con un tipo di ritorno divertente. Questo è probabilmente il motivo per cui sono usati in modo intercambiabile.

Nei linguaggi funzionali, di solito non esiste una procedura, tutto è una funzione.

Esempio in C:

 // function int square( int n ) { return n * n; } // procedure void display( int n ) { printf( "The value is %d", n ); } 

Sebbene si noti che lo standard C non parla di procedure, solo funzioni.

In generale, una procedura è una sequenza di istruzioni.
Una funzione può essere la stessa, ma in genere restituisce un risultato.

C’è un sottoprogramma di termine o sottoprogramma che rappresenta un pezzo di codice parametrizzato che può essere chiamato da diversi punti.

Le funzioni e le procedure sono implementazioni di quelli. Di solito le funzioni restituiscono valori e le procedure non restituiscono nulla.

Differenze di base

  • Una funzione deve restituire un valore ma in Stored procedure è facoltativo: una procedura può restituire valori 0 o n .
  • Le funzioni possono avere solo i parametri di input, mentre le procedure possono avere parametri di input / output.
  • Per una funzione è obbligatorio prendere un parametro di input, ma una stored procedure può richiedere da 0 a n parametri di input.
  • Le funzioni possono essere richiamate da una procedura, mentre le procedure non possono essere richiamate da una funzione.

Differenze avanzate

  • Le eccezioni possono essere gestite da blocchi try-catch in una procedura, mentre un blocco try-catch non può essere utilizzato in una funzione.
  • Possiamo andare per la gestione delle transazioni in una procedura, mentre in una funzione non possiamo.

In SQL:

  • Una procedura consente di selezionare SELECT e DML ( INSERT , UPDATE , DELETE ), mentre Function consente solo l’istruzione SELECT in essa.
  • Le procedure non possono essere utilizzate in un’istruzione SELECT , mentre le funzioni possono essere incorporate in un’istruzione SELECT .
  • Le stored procedure non possono essere utilizzate nelle istruzioni SQL ovunque in un blocco WHERE (o HAVING o SELECT ), mentre le funzioni possono.
  • Le funzioni che restituiscono le tabelle possono essere trattate come un altro set di righe. Questo può essere usato in un blocco JOIN con altre tabelle.
  • Le funzioni inline possono essere pensate come viste che prendono parametri e possono essere utilizzate nei blocchi JOIN e in altre operazioni del set di righe.

Più rigorosamente, una funzione obb obey la proprietà che f (x) = f (y) se x = y, cioè calcola lo stesso risultato ogni volta che viene chiamato con lo stesso argomento (e quindi non cambia lo stato del sistema.)

Pertanto, rand () o print (“Hello”), ecc. Non sono funzioni ma procedure. Mentre sqrt (2.0) dovrebbe essere una funzione: non c’è alcun effetto osservabile o cambiamento di stato, non importa quanto spesso lo si chiami e restituisca sempre 1.41 e alcuni.

All’interno della procedura possiamo usare le istruzioni DML (Insert / Update / Delete), ma la funzione Inside non può usare le istruzioni DML.

La procedura può avere entrambi i parametri input / output, ma la funzione può avere solo un parametro di input.

Possiamo usare il blocco Try-Catch nella stored procedure, ma non possiamo usare il blocco Try-Catch.

Non possiamo usare Stored Procedure nell’istruzione Select, ma In Function possiamo usare nell’istruzione Select.

Stored Procedure può restituire valori 0 o n (max 1024), ma Function può restituire solo 1 valore che è obbligatorio.

Stored procedure non può essere chiamata da Function, ma possiamo chiamare function da Stored Procedure.

Possiamo usare la transazione in Stored Procedure, ma in funzione non possiamo usare la transazione.

Non possiamo usare Stored Procedure in Sql statement ovunque nella sezione Where / Having / select, ma in funzione possiamo usare.

Non possiamo partecipare alla Stored Procedure, ma possiamo unire la funzione.

per altro .. clicca qui … http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

Nella maggior parte dei contesti: una funzione restituisce un valore, mentre una procedura no. Entrambi sono pezzi di codice raggruppati insieme per fare la stessa cosa.

Nel contesto di programmazione funzionale (in cui tutte le funzioni restituiscono valori), una funzione è un object astratto:

 f(x)=(1+x) g(x)=.5*(2+x/2) 

Qui, f è la stessa funzione di g, ma è una procedura diversa.

Se qui siamo indipendenti dal linguaggio, la procedura di solito specifica una serie di atti richiesti per raggiungere in modo affidabile e idempotativo determinati risultati. Cioè, una procedura è fondamentalmente un algoritmo.

Le funzioni, d’altra parte, sono un pezzo di codice un po ‘indipendente all’interno di un programma più ampio. In altre parole, la funzione è l’implementazione di una procedura.

Una funzione restituisce un valore e una procedura esegue solo i comandi.

La funzione del nome deriva dalla matematica. Viene utilizzato per calcolare un valore in base all’input.

Una procedura è un insieme di comandi che possono essere eseguiti in ordine.

Nella maggior parte dei linguaggi di programmazione, anche le funzioni possono avere una serie di comandi. Quindi la differenza è solo nella restituzione di una parte di valore.

Ma se ti piace mantenere una funzione pulita, (basta guardare le lingue funzionali), devi assicurarti che una funzione non abbia un effetto collaterale.

La funzione può essere utilizzata all’interno di una istruzione sql, mentre la procedura non può essere utilizzata all’interno di una istruzione sql.

Le istruzioni Insert, Update e Create non possono essere incluse nella funzione, ma una procedura può avere queste istruzioni.

La procedura supporta le transazioni ma le funzioni non supportano le transazioni.

La funzione deve restituire uno e un solo valore (un altro può essere restituito dalla variabile OUT) ma la procedura restituisce tanti set di dati e valori di ritorno.

I piani di esecuzione di entrambe le funzioni e le procedure sono memorizzate nella cache, quindi le prestazioni sono le stesse in entrambi i casi.

Mi oppongo a qualcosa che continuo a vedere ripetutamente nella maggior parte di queste risposte, che ciò che rende una funzione una funzione è che restituisce un valore.

Una funzione non è un qualsiasi vecchio metodo che restituisce un valore. Non così: affinché un metodo sia una funzione reale, deve restituire lo stesso valore sempre dato un input specifico. Un esempio di un metodo che non è una funzione è il metodo random nella maggior parte delle lingue, perché sebbene restituisca un valore, il valore non è sempre lo stesso.

Una funzione quindi è più simile a una mappa (ad esempio, dove x -> x' per una funzione monodesmensionale). Questa è una distinzione molto importante tra i metodi e le funzioni regolari perché quando si gestiscono le funzioni reali, il momento e l’ordine in cui vengono valutati non dovrebbero mai avere importanza dove non è sempre il caso con le non funzioni.

Ecco un altro esempio di un metodo che non è una funzione, ma restituirà comunque un valore.

 // The following is pseudo code: g(x) = { if (morning()) { g = 2 * x; } else { g = x; } return g; } 

Mi oppongo inoltre all’idea che le procedure non restituiscano valori. Una procedura è solo un modo specifico di parlare di una funzione o di un metodo. Ciò significa che se il metodo sottostante che la procedura definisce o implementa restituisce un valore, indovina quale procedura restituisce un valore. Prendiamo ad esempio il seguente frammento dal SICP :

 // We can immediately translate this definition into a recursive procedure // for computing Fibonacci numbers: (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) 

Hai sentito parlare di procedure ricorsive molto recentemente? Stanno parlando di una funzione ricorsiva (una funzione reale) e sta restituendo un valore e stanno usando la parola “procedura”. Allora, qual è la differenza, allora?

Bene, un altro modo di pensare a una funzione (oltre al significato sopra menzionato) è come una rappresentazione astratta di un ideale come il numero 1. Una procedura è l’effettiva implementazione di quella cosa. Personalmente penso che siano intercambiabili.

(Nota, se leggi quel capitolo dal link che ti fornisco potresti scoprire che un concetto più difficile da comprendere non è la differenza tra una funzione e una procedura, ma un processo e una procedura. Lo sapevi che una procedura ricorsiva può avere un processo iterativo?)

Un analogo per le procedure sono le ricette. Per esempio; Supponiamo che tu abbia una macchina chiamata make-pies questa macchina prende gli ingredienti di (fruit, milk, flower, eggs, sugar, heat) e questa macchina restituisce una pie .

Potrebbe apparire una rappresentazione di questa macchina

 make-pies (fruit, milk, flower, eggs, sugar, heat) = { return (heat (add fruit (mix eggs flower milk))) } 

Certo che non è l’unico modo per fare una torta.

In questo caso possiamo vedere che:

 A function is to a machine as a procedure is to a recipe as attributes are to ingredients as output is to product 

Questa analogia va bene, ma si rompe quando si tiene conto del fatto che quando si ha a che fare con un programma per computer tutto è un’astrazione. Quindi, diversamente dal caso di una ricetta per una macchina, stiamo confrontando due cose che sono esse stesse astrazioni; due cose che potrebbero anche essere la stessa cosa E ritengo che siano (per tutti gli intenti e scopi) la stessa cosa.

Nel contesto di db : la stored procedure è il piano di esecuzione precompilato dove non lo sono le funzioni.

In termini di С # / Java, la funzione è il blocco di codice, che restituisce un valore particolare, ma la procedura è il blocco di codice che restituisce vuoto (nulla). In C # / Java, entrambe le funzioni e le procedure spesso vengono chiamate solo metodi .

  //This is a function public DateTime GetCurrentDate() { return DateTime.Now.Date; } //This is a procedure(always return void) public void LogMessage() { Console.WriteLine("Just an example message."); } 

Procedure: 1. Le procedure sono le raccolte di istruzioni che definiscono i calcoli parametrizzati. 2. Le procedure non possono restituire valori.

3. Le procedure non possono essere chiamate dalla funzione.

Funzioni 1. Le funzioni assomigliano strutturalmente a procedure ma sono semanticamente modellate su funzioni matematiche. 2. Può restituire valori 3. La funzione può essere richiamata dalle procedure.

Le procedure e le funzioni sono entrambe subroutine l’ unica differenza tra esse è che una procedura restituisce valori multipli (o almeno può fare) mentre una funzione può restituire solo un valore (questo è il motivo per cui la notazione di funzione è usata in matematica come solitamente viene trovato un solo valore in un dato momento) sebbene alcuni linguaggi di programmazione non seguano queste regole, questa è la loro vera definizione