Funzione (informatica): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 79.3.123.93 (discussione), riportata alla versione precedente di 82.55.21.38 |
Nessun oggetto della modifica |
||
Riga 2:
{{F|programmazione|febbraio 2013}}
{{C|argomento=informatica|mese=febbraio 2015|motivo=Non tutti i linguaggi fortemente tipizzati richiedono dichiarazioni di tipo. Cfr. [[Discussione:Funzione (informatica)#Linguaggi fortemente tipati e linguaggi esplicitamente tipati|discussione]].}}
In [[informatica]], nell'ambito della [[programmazione (informatica)|programmazione]], una '''funzione''' (detta anche '''subroutine''', '''routine''', '''procedura''', '''sottoprogramma''' o '''metodo''')
L'importanza, la praticità e i vantaggi di una funzione stanno nel fatto che può essere "chiamata" ("richiamata", "invocata" o "attivata") in diversi punti del programma di cui fa parte ogni volta in cui si ha la necessità di farlo come se fosse una singola istruzione senza la necessità di doverne riscrivere ogni volta il relativo [[codice sorgente|codice]] implementando dunque il cosiddetto [[riuso di codice]], cui si aggiunge una più facile [[manutenibilità]] del codice all'interno del programma ed una più facile [[ingegneria del software|progettazione]] del [[software]] secondo la classica filosofia del ''[[Divide et impera (informatica)|divide et impera]]''.
Riga 9:
==Descrizione==
Una funzione dovrebbe eseguire una determinata operazione o risolvere un determinato problema (o al limite tutto il problema) all'interno dell'[[algoritmo]] risolutivo, contribuendo così alla [[fattorizzazione (software)|fattorizzazione]] del [[software]]. Ad esempio, una subroutine progettata per disporre in ordine crescente un insieme di numeri interi può essere richiamata in tutti i contesti in cui questa operazione sia utile o necessaria, e supplisce alla mancanza di una vera e propria "istruzione" dedicata allo scopo, consentendo al contempo di descrivere il corrispondente [[algoritmo di ordinamento]] in un unico punto del programma.
Le subroutine che implementano funzionalità di base spesso richiamate nel [[codice sorgente]] dal programmatore sono raccolte all'interno delle cosiddette [[libreria (informatica)|librerie]].
Riga 26 ⟶ 25:
In generale la sintassi comune della definizione di una funzione prevede:
* un identificativo o '''nome''';
* per [[Tipizzazione forte|linguaggi tipizzati]]
* la specifica (non sempre necessaria) dei cosiddetti '''[[Parametro (programmazione)|parametri]]''' o ''operandi'' i cui valori saranno poi passati in fase di invocazione e su cui la funzione opererà in fase di elaborazione; anche in assenza di parametri
* il '''corpo''' della funzione ovvero il nucleo dell'elaborazione costituita dal blocco, opportunamente delimitato, di una o più istruzioni, ciascuna terminata dal comando di terminazione, [[iterazione|cicli iterativi]], [[selezione (informatica)|strutture condizionali]] ecc., il tutto concluso con la variabile eventualmente ritornata in output. Variabili instanziate o definite nel blocco saranno necessariamente variabili locali cioè con visibilità solo all'interno del blocco stesso.
Una funzione è una porzione di codice che può essere invocata da qualsiasi punto di un programma
Un funzione può a sua volta richiamare un'altra funzione, restando in attesa che questa termini. Si parla in questo caso di '''funzione invocante''' e '''funzione invocata''', o '''funzione chiamante''' e '''funzione chiamata'''. È anche possibile che una funzione richiami direttamente o indirettamente sé stessa. In questo caso, si dice che in un dato momento sono in esecuzione più '''istanze''' di una stessa funzione. Questa possibilità è essenziale per la [[ricorsione|programmazione ricorsiva]].
Riga 80 ⟶ 79:
==== Passaggio per nome ====
Questo meccanismo (nella letteratura in inglese indicato come "''pass by name''"), di difficile realizzazione nei linguaggi compilati, è soprattutto usato nelle [[Macro (informatica)|macro]]. Il passaggio per nome è tuttavia stato usato nell'[[ALGOL|ALGOL 68]] e nel [[Simula]]. A differenza degli altri tipi di passaggio di parametro, in cui viene creato il legame tra il parametro effettivo ed il parametro formale, in questo caso si crea un legame tra il parametro formale ed una chiusura, formata dal parametro effettivo insieme al proprio ambiente di valutazione, che è fissato al momento della chiamata. Inoltre bisogna fare attenzione che con questo tipo di passaggio di parametro, il parametro effettivo viene valutato ogni volta che il parametro formale viene incontrato durante l'esecuzione.
==== Passaggio per condivisione ====
Riga 92 ⟶ 90:
Una chiamata di funzione è quindi un'[[espressione (informatica)|espressione]], che viene valutata per ottenere un valore. La valutazione di una espressione che contenga una chiamata di funzione comporta l'esecuzione della funzione stessa.
In alcuni linguaggi, il termine '''procedura''' indica una funzione senza valore di ritorno, in altri si usa un tipo di dato apposito, detto
Nei linguaggi funzionali il tipo di dato restituito può essere una funzione, che il chiamante potrà invocare.
|