Quali sono i significati specifici dei termini: funzioni, metodi, procedure e subroutine?

10

Mi chiedo quali sono le differenze specifiche nella terminologia che usiamo per raggruppare parti di codice relative. A volte ho visto i termini usati in modo intercambiabile: molti linguaggi OO usano persino la parola chiave "funzione" per definire un metodo. (Perché?)

Se vuoi essere preciso, quali sono i significati specifici di ciascuno? O è semplicemente quello che ogni lingua sceglie di chiamarlo?

    
posta Andrew Vit 04.12.2011 - 01:17
fonte

3 risposte

20
  • sottoprogramma, subroutine
    "subroutine" deriva probabilmente dal linguaggio assembly. Alcuni processori includono istruzioni per supportare le subroutine come un modo di organizzare il codice e riutilizzare sezioni di codice comuni. Ad esempio, il processore 6502 aveva istruzioni JSR (passa a subroutine) e RTS (ritorno da subroutine). Ricordo che viene anche usato molto nella programmazione strutturata, in cui un programma è una gerarchia di unità di codice che a volte venivano chiamate subroutine o sottoprogrammi. IMO, questi sono i termini più generici per alcune unità di codice a cui il controllo viene temporaneamente trasferito allo scopo di completare una determinata attività.

  • funzione, procedura
    Questi sono spesso usati in modo intercambiabile, ma in alcune lingue c'è una distinzione. In Pascal, una funzione è un sottoprogramma che restituisce un valore, mentre una procedura è un sottoprogramma che non lo fa. In C e lingue correlate, ogni sottoprogramma ha un tipo di ritorno (anche se è void ), quindi non c'è alcuna distinzione.

  • metodo, funzione membro
    Questi sono due nomi per la stessa cosa, essenzialmente una funzione associata a una determinata classe o oggetto.

  • operatore
    Ogni lingua ha una serie di operatori integrati. In alcune lingue, come C ++, gli operatori sono funzioni che possono essere sovrascritte (cioè sostituite) e / o sovraccaricate (ovvero definite per nuovi tipi).

  • funzione anonima
    Questo si riferisce a una funzione senza un nome. Le funzioni anonime sono essenzialmente blocchi di codice che possono essere assegnati a variabili o passati come parametri per l'uso successivo, ad esempio come routine di completamento.

  • chiusura, espressione lambda, blocco
    Una chiusura è una porzione di codice associata a un insieme di variabili. Penso alle chiusure come funzioni anonime più contesto.

risposta data 04.12.2011 - 03:59
fonte
-1

Dipende dalle lingue, cosa puoi fare con loro

  • hai bisogno di fare una distinzione
  • c'è una distinzione nella sintassi, o è solo comodità, quando si parla di codice

AFAIK, in Basic, se chiami qualcosa, che non restituisce nulla, ma esegue un lavoro con effetti collaterali, come la stampa, scrivi su file o cambia una variabile globale, è stata chiamata una procedura.

Se restituisce qualcosa, è stata chiamata una funzione.

In un linguaggio OOP come Java raramente ho incontrato il termine "funzione", ma "metodo", ed è stato insegnato che le funzioni sono cose che sono globali e possono essere chiamate da tutti.

Nella scala funzionale e in linguaggio OOP, un metodo non è chiamato funzione, ma puoi passare una cosa del genere a un altro metodo, e quindi diventa una funzione.

Una subroutine è una routine, che viene chiamata da un'altra routine, a quanto mi risulta.

In sintesi, non penso che ci sia una definizione concisa su tutte le lingue e più su paradigmi. Devi considerare la cultura specifica in cui ti trovi, se usi questi termini, forse dovresti introdurre prima la tua definizione.

    
risposta data 04.12.2011 - 01:27
fonte
-1

Direi che a seconda del contesto, tutte queste parole potrebbero significare la stessa cosa o cose molto diverse, ad esempio ciò che Caleb ha scritto (ma c'è di più, cioè le lingue in cui gli operatori sono funzioni di prima classe ecc.). Quindi, è difficile dare una definizione specifica e saggio non assumere troppo a meno che non sia noto il contesto (linguaggio di programmazione).

    
risposta data 11.03.2016 - 16:38
fonte

Leggi altre domande sui tag