it-swarm.it

Metodo vs Funzione vs Procedura

Domanda semplice, ma sento spesso questi tre termini definiti con tanta ferocia, ma che mi è stato detto che significano cose diverse nel corso degli anni.

Quali sono le definizioni "corrette" di "Procedure", "Metodi", "Funzione", "Subroutine", ecc.?

113
Django Reinhardt

Vado con una risposta diversa qui: praticamente parlando, non c'è davvero alcuna differenza, con la leggera eccezione che "metodo" di solito si riferisce a una subroutine associata a un oggetto nelle lingue OO.

I termini "procedura, funzione, sottoprogramma, sottoprogramma e metodo" significano davvero la stessa cosa: un sottoprogramma richiamabile all'interno di un programma più ampio. Ma è difficile trovare una definizione che catturi tutti gli usi varianti di questi termini, perché non sono usati coerentemente in linguaggi di programmazione o paradigmi.

Si potrebbe dire che una funzione restituisce un valore. Bene, la seguente funzione C non restituisce un valore:

void f() { return; }

... ma dubito che troverai qualcuno che lo definirebbe una procedura.

Certo, in Pascal, le procedure non restituiscono valori e le funzioni restituiscono valori, ma questo è semplicemente un riflesso di come Pascal è stato progettato. In Fortran, una funzione restituisce un valore e una subroutine restituisce più valori. Eppure nulla di tutto ciò ci consente davvero di trovare una definizione "universale" per questi termini.

In effetti, il termine "programmazione procedurale" si riferisce a un'intera classe di linguaggi, tra cui C, Fortran e Pascal, solo uno dei quali utilizza effettivamente il termine "procedura" per indicare qualsiasi cosa.

Quindi nulla di tutto ciò è veramente coerente. L'unica eccezione è probabilmente il "metodo", che sembra essere usato quasi interamente con OO linguaggi, facendo riferimento a una funzione associata a un oggetto. Anche se anche questo non è sempre coerente. C++ , ad esempio, di solito usa il termine "funzione membro" piuttosto che metodo (anche se il termine "metodo" si è insinuato nel volgare C++ tra i programmatori).

Il punto è che nulla di tutto ciò è veramente coerente. Riflette semplicemente la terminologia utilizzata da qualunque lingua sia in voga in quel momento.

109
Charles Salvia

Una funzione restituisce un valore, ma una procedura no.

Un metodo è simile a una funzione, ma lo è interno a parte di una classe. Il termine metodo è usato quasi esclusivamente nella programmazione orientata agli oggetti.

69
Bruce Alderman

Una funzione è qualcosa che accetta un sacco di input e restituisce uno o più valori. Se i valori restituiti sono interamente determinati dagli input e la funzione non ha effetti collaterali (registrazione, forse o causa cambiamenti di stato al di fuori di sé), allora si chiama funzione pura.

Una procedura è una funzione che non restituisce un valore. In particolare, ciò significa che una procedura può causare solo effetti collaterali. (Ciò potrebbe includere la mutazione di un parametro di input!)

Un metodo è una funzione che si chiude su un insieme di variabili, ovvero un chiusura. Prende zero o più parametri di input, ha accesso a questo set di variabili e restituisce zero o più valori. In OO linguaggi questi metodi sono collegati a oggetti o classi.

Nella maggior parte dei mainstream OO linguaggi, quelle variabili chiuse sono chiamate campi membri o variabili di istanza di un oggetto. Un metodo può essere una funzione pura, una funzione impura o una procedura.

Quest'ultima definizione porta alla corrispondenza oggetto = struct + chiusure .

53
Frank Shearar

Bruce ha un buona risposta . Vorrei aggiungere, semanticamente:

  • Una procedura dovrebbe "fare qualcosa" agli argomenti o causare qualche altro effetto collaterale (ad esempio printf)
  • Una funzione dovrebbe (a) rispondere a una domanda sugli argomenti, oppure (b) calcolare un nuovo valore basato sugli argomenti
  • Un metodo di funzione dovrebbe rispondere a una domanda sullo stato dell'oggetto
  • Un metodo di procedura dovrebbe cambiare lo stato dell'oggetto
14
Scott Whitlock

buone risposte dettagliate sopra; la storia breve è che avranno tutti i gusti di subroutine; ciò che si intende per ciascun termine varierà in base al contesto del linguaggio di programmazione

in generale, le funzioni restituiscono un valore, ma non è necessario

i metodi sono generici OOP al momento

in SQL, le stored procedure hanno output ma in genere restituiscono solo un codice di errore, mentre le funzioni definite dall'utente devono restituire un valore (che può essere un set di risultati)

ancora una volta, la differenza precisa tra questi termini dipende da chi stai parlando!

4
Steven A. Lowe

L'80% della competenza è direttamente correlata alla familiarità con la nomenclatura,

Il 95% della produttività è la capacità di identificare ciò che è utile al momento nonostante i termini utilizzati per descriverlo

Preferisco praticamente chiamarli tutti in c # tranne che quando ho usato MSSQL che avevamo sproc, ma ovviamente ora usiamo Postgres e si chiamano funzioni.

2
MvcCmsJon