Metodo vs Funzione vs Procedura

95

Domanda semplice, ma sento spesso questi tre termini definiti con tanta ferocia, ma che sono stati conosciuti per significare cose diverse nel corso degli anni.

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

    
posta Django Reinhardt 23.11.2010 - 18:33
fonte

6 risposte

94

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

I termini "procedura, funzione, subroutine, sottoprogramma e metodo" significano veramente la stessa cosa: un sottoprogramma chiamabile all'interno di un programma più ampio. Ma è difficile trovare una definizione che raccolga tutti gli usi varianti di questi termini, perché non vengono utilizzati in modo coerente tra linguaggi di programmazione o paradigmi.

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

void f() { return; }

... ma dubito che troveresti qualcuno che lo chiamerebbe una procedura.

Certo, in Pascal, le procedure non restituiscono valori e valori restituiti da funzioni, ma questo è solo un riflesso del modo in cui Pascal è stato progettato. In Fortran, una funzione restituisce un valore e una subroutine restituisce più valori. Eppure niente 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, inclusi C, Fortran e Pascal, solo uno dei quali utilizza effettivamente il termine "procedura" per indicare qualsiasi cosa.

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

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

    
risposta data 23.11.2010 - 20:37
fonte
61

Una funzione restituisce un valore, ma una procedura no.

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

    
risposta data 23.11.2010 - 18:41
fonte
48

Una funzione è qualcosa che richiede 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 di cambiamenti di stato al di fuori di se stessa), allora si chiama funzione pura.

Una procedura è una funzione che non restituisce un valore. In particolare, ciò significa che una procedura può solo causare 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 una chiusura . Richiede zero o più parametri di input, ha accesso a questo insieme di variabili e restituisce zero o più valori. Nei linguaggi OO questi metodi sono collegati a oggetti o classi.

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

L'ultima definizione porta alla corrispondenza object = struct + closures .

    
risposta data 23.11.2010 - 18:59
fonte
14

Bruce ha una buona risposta . Vorrei aggiungere, semanticamente:

  • Una procedura dovrebbe "fare qualcosa" agli argomenti o causare un altro effetto collaterale (ad esempio printf )
  • Una funzione dovrebbe (a) rispondere a una domanda sugli argomenti, o (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
risposta data 23.11.2010 - 18:51
fonte
4

risposte dettagliate dettagliate sopra; la storia breve è che avranno tutti i sapori delle subroutine; ciò che si intende per ciascun termine varia in base al contesto linguistico di programmazione

in generale, le funzioni restituiscono un valore, ma non devono

I

metodi sono termini OOP generici 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 potrebbe essere un set di risultati)

di nuovo, la differenza precisa tra questi termini dipende da chi stai parlando!

    
risposta data 24.11.2010 - 18:23
fonte
2

L'80% delle competenze è direttamente correlato alla familiarità con la nomenclatura,

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

Preferisco praticamente chiamarli tutti i metodi in c # tranne che quando ho usato MSSQL abbiamo avuto sproc, ma ovviamente ora usiamo Postgres e sono chiamate funzioni.

    
risposta data 04.01.2013 - 23:39
fonte

Leggi altre domande sui tag