Salve a tutti ragazzi,
Dopo aver parlato delle variabili, iniziamo a parlare delle funzioni.
Una funzione in informatica è un costrutto che permette di raggruppare una sequenza di istruzioni in un unico blocco di istruzioni che fanno parte del programma.
Essa può essere richiamata in diversi punti del programma ogni volta che si ha la necessità di farlo evitando di riscrivere ogni volta parti di codice.
Vediamo adesso come una funzione viene utilizzata in matematica oppure in informatica.
In matematica una funzione è scritta nella forma :
- Codice:
-
y=f(x)
ossia ad ogni valore di x (variabile indipendente) corrisponde uno ed un solo valore della variabile dipende y.
In una funzione è possibile che ci siano più variabili indipendenti :
- Codice:
-
f(x,y)=x+y
Le variabili indipendenti, sono i parametri che si danno in input alla funzione (è anche possibile creare funzioni senza alcun parametro); mentre il risultato si ottiene usando la keyword return.
Tutto il codice di una funzione deve trovarsi tra parentesi graffe “ { } “
Ecco la struttura di una funzione:
- Codice:
-
tipo_ritornato nome_funzione(parametro,parametro 2....parametro n){
codice
...
}
Facciamo un piccolo esempio con una funzione che calcola il cubo di un numero:
- Codice:
-
int cubo(int x) {
return x*x*x;
}
Esaminiamo la funzione:
* “int” indica il tipo del valore ottenuto dalla funzione;
* “cubo(int x)” cubo è il nome della funzione, mentre dentro le parentesi troviamo il parametro che passiamo alla funzione e il suo tipo;
* “return” indica quale valore deve ritornare la funzione (nel nostro caso il valore da ritornare è il cubo del numero x, cioè x*x*x).
L'ANSI C ha imposto che le funzioni in un programma devono essere dichiarate prima del punto in cui vengono richiamate.
Molte volte però non è possibile dichiarare funzioni prima del punto in cui vengono usate, questo perchè possono trovarsi in librerie esterne; L'ANSI C allora impone che prima del loro uso sia presente un prototipo della funzione. Un prototipo consiste in una funzione dichiarate attraverso tipo di ritorno, nome e lista argomenti.
Esempio:
- Codice:
-
int prova();
int main() {
prova();
return 0;
}
int prova() {
return 0;
}
I prototipi solitamente vengono inseriti nel file header, ma se nel caso dell'esempio fatto sopra noi inseriamo solo il prototipo senza la funziona, si ha un errore di linking.
Un programma di grandi dimensioni di solito la funzione viene inserita in un file header (.h), l'implementazione in un file .c e il programma nel main.c.
Esistono anche delle funzioni che non hanno un valore ritornato,cioè eseguono un pezzo di codice ed escono, queste funzioni si chiamano procedure.
Esempio di procedura:
- Codice:
-
void prova() {
printf(“procedura”);
return;
}
Il return è opzionale si può anche non inserire, ma è indispensabile nel caso si voglia far finire la funzione prima.
Ecco un esempio di richiamo di una procedura:
- Codice:
-
#include <stdio.h>
void prova(); //prototipo procedura
int main() {
prova();
return 0;
}
void prova() {
printf (“procedura”);
}
Le funzioni possono essere anche statiche,cioè vengono instanziate in memoria alla creazione del programma e distrutte alla fine del processo che le richiama. Possono essere visibili solo all'interno del file che le dichiara.
Per dichiararle basta usare la keyword static :
- Codice:
-
static void prova()
Esistono anche funzioni,chiamate “macro”,che non vengono allocate in memoria quando si esegue il processo,ma vengono macinate dal precompilatore quando le incontra.
Per creare una macro si usa la direttiva al preprocessore #define:
- Codice:
-
#include <stdio.h>
#define CUBO(x) (x*x*x)
int main() {
printf (“%d”,CUBO(5));
return 0;
}
Questo genere di funzioni è abbastanza primitivo,oltre a essere scarsamente leggibile,ma si preferisce usarlo per motivi di ottimizzazione del programma.
*questo articolo è presente anche su
[Devi essere iscritto e connesso per vedere questo link] e su
[Devi essere iscritto e connesso per vedere questo link]