Funzione (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Spostato paragrafo
Riorganizzate sezioni
Riga 5:
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 e una più facile [[ingegneria del software|progettazione]] del [[software]] secondo la classica filosofia del ''[[Divide et impera (informatica)|divide et impera]]''.
 
== 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 (software)|librerie]].
 
== Funzionamento ==
Quasi tutti i [[linguaggio di programmazione|linguaggi di programmazione]] supportano le funzioni, fornendo una propria sintassi per definire una funzione, ovvero scriverne il codice, e una per richiederne l'esecuzione (invocazione o chiamata della funzione).
In generale la sintassi comune della definizione di una funzione prevede:
 
In generale la sintassi comune della definizione di una funzione prevede:
* un identificativo o nome;
* per [[Tipizzazione forte|linguaggi tipizzati]] un [[tipo di ritorno]] ovvero una specifica sul [[tipo di dato]] che essa restituirà in output all'utente o ad altre funzioni che la invocano; quando una funzione non restituisce nulla (es. funzioni con tipo restituito ''void'') la funzione avrà svolto altre elaborazioni agendo ad esempio sullo stato delle [[variabile (informatica)|variabili]] del programma o visualizzando a video qualcosa senza restituire nulla. In linguaggi non tipizzati o a [[tipizzazione debole]] invece non è presente il tipo di ritorno.
Riga 98 ⟶ 93:
A causa di queste operazioni, l'invocazione di una funzione comporta un costo, seppur normalmente modesto, in termini di prestazioni.
 
=== SicurezzaUtilizzi ===
=== Riuso del codice ===
 
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 (software)|librerie]].
 
=== Hacking ===
 
Il meccanismo di implementazione delle funzioni, insieme all'aritmetica dei puntatori nel [[linguaggio C]], viene sfruttato per costruire attacchi di tipo ''[[stack overflow]]'' o ''[[buffer overflow]]'', che permettono di prendere il controllo di un programma in esecuzione fornendogli dati accuratamente artefatti.