Domanda

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

Quindi, la mia domanda è:

  

Qual è la differenza in termini di funzionalità, il loro scopo e utilizzare?

Un esempio sarebbe apprezzato.

È stato utile?

Soluzione

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

La funzione nome deriva dalla matematica. E 'utilizzato per calcolare un valore in base all'input.

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

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

Ma se ti piace mantenere una funzione pulita, (basta guardare a linguaggi funzionali), è necessario assicurarsi che una funzione non ha un effetto collaterale.

Altri suggerimenti

Questo dipende dal contesto.

In Pascal-come le lingue, funzioni e procedure sono entità distinte, che differiscono per se fanno o non restituiscono un valore. Si comportano in modo diverso WRT. la sintassi del linguaggio (es. procedura richiede dichiarazioni forma; non è possibile utilizzare una chiamata di procedura all'interno di un'espressione vs. chiamate di funzione non fanno dichiarazioni, li si deve utilizzare in altre dichiarazioni). Pertanto, i programmatori Pascal-allevati distinguere tra quelli.

In linguaggi C-like, e molti altri linguaggi contemporanei, questa distinzione non c'è più; in lingue staticamente tipizzati, le procedure sono solo funziona con un tipo di ritorno divertente. Questo è probabilmente il motivo per cui sono usati in modo intercambiabile.

In linguaggi funzionali, di solito c'è alcuna cosa come 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 );
}

Anche se si dovrebbe notare che il C standard non parla di procedure, solo funzioni.

In generale, una procedura è una sequenza di istruzioni.
Una funzione può essere lo stesso, ma di solito restituisce un risultato.

C'è un termine subroutine o sottoprogramma che si distingue per un pezzo con parametri di codice che può essere chiamato da luoghi diversi.

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

Differenze di base

  • Una funzione deve restituire un valore, ma nella stored procedure è facoltativo: una procedura può restituire 0 o n Valori.
  • Le funzioni possono avere solo parametri di input per esso, che le procedure possono avere parametri di input / output.
  • per una funzione, è obbligatorio prendere un parametro di input, ma di una stored procedure può richiedere da 0 a n parametri di input.
  • Le funzioni possono essere richiamate da una procedura che le procedure non possono essere chiamate 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.
  • Siamo in grado di andare per Transaction Management nell'ambito di un procedimento, mentre in una funzione che non possiamo.

In SQL:

  • Una procedura consente SELECT nonché istruzioni DML (INSERT, UPDATE, DELETE) in esso, mentre la funzione consente solo dichiarazione SELECT in esso.
  • Le procedure non possono essere utilizzati in un comunicato SELECT, mentre le funzioni possono essere incorporati in un comunicato SELECT.
  • stored procedure non possono essere utilizzati in istruzioni SQL ovunque in un WHERE (o un HAVING o un SELECT) blocco, mentre le funzioni possono.
  • Funzioni che restituiscono tabelle possono essere trattati come un altro set di righe. Questo può essere usato in un blocco JOIN con altre tabelle.
  • Funzioni
  • linea possono essere pensati come viste che accettano i parametri e possono essere utilizzati in blocchi JOIN e altre operazioni del set di righe.

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

Quindi, rand () o di stampa ( "Ciao"), ecc non sono funzioni ma le procedure. Mentre sqrt (2.0) dovrebbe essere una funzione:. V'è alcun effetto o stato osservabile cambiamento non importa quante volte si chiami e ritorna sempre 1.41 e alcuni

All'interno procedura possiamo usare DML (Insert / Update / Delete) le dichiarazioni, ma la funzione interna non possiamo usare istruzioni DML.

Procedura può avere entrambi i parametri di ingresso \ uscita, ma la funzione può avere solo parametro di input.

Possiamo usare try-catch blocco in stored procedure, ma in funzione Non possiamo usare try-catch blocco.

Non è possibile utilizzare stored procedure in Select, ma in funzione Possiamo usare in Select.

stored procedure può restituire 0 o n valori (max 1024), ma la funzione può restituire solo 1 valore che è obbligatorio.

stored procedure non può essere chiamata dalla funzione, ma possiamo chiamare la funzione dalla stored procedure.

Possiamo utilizzare la transazione in stored procedure, ma in funzione non siamo in grado di utilizzare la transazione.

Non è possibile utilizzare stored procedure in un'istruzione SQL in qualsiasi parte del / Avere sezione dove / select, ma in funzione possiamo usare.

Non possiamo aderire a stored procedure, ma siamo in grado di unire la funzione.

per di più .. 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 non lo fa. Entrambi sono pezzi di codice raggruppati insieme per fare la stessa cosa.

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

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

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

Se siamo indipendente dal linguaggio qui, Procedura di solito specifica una serie di atti necessari per realizzare in modo affidabile e idempotently certo risultato. Cioè, una procedura è fondamentalmente un algoritmo.

Le funzioni, d'altra parte, è un pezzo in qualche modo indipendente di codice all'interno di un programma più ampio. In altre parole, la funzione è l'attuazione di una procedura.

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

La funzione nome deriva dalla matematica. E 'utilizzato per calcolare un valore in base all'input.

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

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

Ma se ti piace mantenere una funzione pulita, (basta guardare a linguaggi funzionali), è necessario assicurarsi che una funzione non ha un effetto collaterale.

La funzione può essere utilizzata all'interno di un'istruzione SQL, mentre procedura non può essere utilizzata all'interno di un'istruzione SQL.

Insert, Update e creare dichiarazioni non possono essere inclusi in funzione, ma una procedura può avere queste dichiarazioni.

Procedura supporta le transazioni ma le funzioni non supportano le transazioni.

funzione deve restituire uno ed un solo valore (un altro può essere rinviato variabile OUT) ma procedura ritorna parti come molti dati e ritornare valori.

I piani di esecuzione di entrambe le funzioni e le procedure vengono memorizzati nella cache, quindi le prestazioni è lo stesso in entrambi i casi.

Mi oppongo con qualcosa Continuo a vedere più e più volte nella maggior parte di queste risposte, che ciò che rende una funzione di una funzione è che restituisce un valore.

Una funzione non è solo un vecchio metodo che restituisce un valore. Non così: Affinché un metodo per essere una vera funzione deve restituire lo stesso valore sempre dato un ingresso specifico. Un esempio di un metodo che non è una funzione è il metodo random in più lingue, perché anche se lo fa restituire un valore il valore non è sempre lo stesso.

Una funzione quindi è più simile a una mappa (ad esempio dove x -> x' di una funzione dimensionale). Questa è una distinzione molto importante tra i metodi e le funzioni regolari, perché quando si tratta di funzioni reali i tempi e l'ordine in cui vengono valutati dovrebbero mai importa dove come questo non è sempre il caso con i non funzioni.

Ecco un altro esempio di un metodo che non è una funzione, ma sarà altrimenti ancora restituire un valore.

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

I ulteriore oggetto alla nozione che le procedure non restituiscono valori. Una procedura è solo un modo specifico di parlare di una funzione o di un metodo. Quindi, questo significa che se il metodo di fondo che la vostra procedura definisce o attrezzi restituisce un valore, allora, indovinate un po 'tale 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))))))

Avete sentito parlare di procedure ricorsive molto ultimamente? 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 di una funzione (oltre al significato di cui sopra) è come una rappresentazione astratta di un ideale, come il numero 1. Una procedura è quella effettiva attuazione di quella cosa. Io personalmente penso che siano intercambiabili.

(Nota, se si legge che il capitolo dal link che fornisco si potrebbe scoprire che un concetto difficile da afferrare non è la differenza tra una funzione e una procedura, ma un processo e una procedura. Lo sapevate che una procedura ricorsiva può avere un processo iterativo?)

Un analogo per le procedure sono le ricette. Per esempio; supponiamo di avere un make-pies macchina chiamata questa macchina prende in ingredienti di (fruit, milk, flower, eggs, sugar, heat) e questa macchina restituisce un pie.

Una rappresentazione di questa macchina potrebbe apparire come

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 è OK, ma si rompe quando si prende in considerazione che quando si tratta di un programma per computer tutto è un'astrazione. Quindi, a differenza del caso di una ricetta ad una macchina stiamo confrontando due cose che sono esse stesse astrazioni; due cose che potrebbe anche essere la stessa cosa. E ritengo che essi sono (per tutti intenti e scopi) la stessa cosa.

Nel contesto di db : procedura immagazzinata è precompilate piano di esecuzione dove come funzioni non sono.

In termini di С # / Java, Funzione è il blocco di codice, che restituiscono un valore particolare, ma Procedura è il blocco di codice che restituiscono vuoto (nulla). In C # / Java entrambe le funzioni e le procedure più spesso chiamato semplicemente 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.Procedures sono le collezioni di dichiarazioni che definiscono i calcoli con parametri. 2.Le modalità non possono restituire valori.

3.Procedures non può essere chiamato dalla funzione.

Funzioni 1.Functions assomigliano strutturalmente procedure, ma sono semanticamente modellati su funzioni matematiche. 2.It può restituire i valori 3.Function può essere chiamato dalle procedure.

Procedure e funzioni sono entrambi subroutine il solo differenza tra loro è che una routine restituisce più (o almeno può fare) valori che una funzione può restituire solo una il valore (questo è il motivo per cui la funzione di notazione è usato in matematica come di solito un solo valore si trova in un dato momento), anche se alcuni linguaggi di programmazione non seguono queste regole questo è il loro vero definizioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top