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


11

Mi chiedo quali sono le differenze specifiche nella terminologia che utilizziamo per raggruppare parti di codice correlate. 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 è proprio come ogni lingua sceglie di chiamarlo?


Le uniche due lingue che conosco functionper l' uso dei metodi sono JavaScript e PHP. Entrambi usano la stessa parola chiave per non metodi (funzioni gratuite), e nel caso di JavaScript non c'è davvero una distinzione tra funzioni e metodi, almeno non a livello di lingua.

Esempi: in VB.Net Subè un Functionvalore senza valore di ritorno. In Pythonpuoi avere una funzione che non fa parte di nessuna classe, quindi non è un metodo. Puoi anche dichiarare le funzioni all'interno delle funzioni, e puoi farlo anche in C #. A volte hanno nomi diversi per lo stesso motivo delle mele e degli ananas: perché sono diversi.
Giobbe

Cosa hai trovato finora che ti fa pensare che ci sia una discrepanza?
JeffO

Risposte:


20
  • sottoprogramma, la subroutine
    "subroutine" deriva probabilmente dal linguaggio assembly. Alcuni processori includono istruzioni per supportare le subroutine come un modo per organizzare il codice e riutilizzare sezioni comuni di codice. Ad esempio, il processore 6502 aveva istruzioni JSR (salta alla subroutine) e RTS (ritorno dalla subroutine). Ricordo che veniva 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 esiste una distinzione. In Pascal, una funzione è un sottoprogramma che restituisce un valore, mentre una procedura è un sottoprogramma che non lo fa. In C e nelle lingue correlate, ogni sottoprogramma ha un tipo di ritorno (anche se lo è void), quindi non c'è distinzione.

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

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

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

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


4
Non tutte le lingue sono fornite con operatori integrati. Alcuni, come Scheme e Haskell, ti consentono di definire funzioni con nomi come '+' o '>> ='. Inoltre, dovresti probabilmente aggiungere che in alcune lingue (come Scheme), "funzione" implica trasparenza referenziale (ad es. Restituisce sempre lo stesso valore per lo stesso input senza effetti collaterali) mentre la procedura non lo fa. Altrimenti, ottima risposta.
Tikhon Jelvis,

Finora ricordo che gli "operatori" sono stati usati principalmente per funzioni con 2 argomenti. Erano infissi (operatore tra argomenti:) 2 + 2. Ci sono piccole eccezioni come 1-arg like ++arg(prefisso) o arg++(postfisso). Anche se non ho visto molti operatori postfix ..
Darek Nędza,

-1

Dipende dalle lingue, da cosa puoi farci

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

AFAIK, in Basic, se si chiama qualcosa, che non restituisce nulla, ma esegue un lavoro con effetti collaterali, come la stampa, la scrittura su file o la modifica di 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", e mi è stato insegnato che le funzioni sono cose che sono globali e che possono essere chiamate da tutti.

Nella scala funzionale e in linguaggio OOP, un metodo non è chiamato funzione, ma è possibile 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, per la mia comprensione.

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


-1

Direi che, a seconda del contesto, tutte quelle parole potrebbero significare la stessa cosa o cose selvaggiamente diverse, ad esempio ciò che Caleb ha scritto (ma ce n'è 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 se non si conosce il contesto (linguaggio di programmazione).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.