Funzioni e procedure in Java
Tutti i programmi che abbiamo realizzato finora erano costituiti da una sequenza di istruzioni,
semplici
o composte, scritte all'interno del metodo main.
Questa
strategia
è
applicabile fino a quando i
programmi sono di piccole dimensioni e si limitano alla risoluzione di problemi piuttosto
semplici.
Quando questi diventano più complessi o semplicemente più corposi, questa tecnica non è più
sostenibile.
Ad esempio, se dobbiamo compiere la stessa azione diverse volte,
su
dati
differenti, non è conveniente
scrivere più volte, nello stesso programma, le stesse istruzioni, che implementano la stessa
logica,
semplicemente applicandola a dati differenti.
In queste circostanze si preferisce definire una procedura o una funzione che risolve un
determinato sottoproblema del problema originario, di dimensioni
ridotte,
e la si utilizza in tutti i
punti del problema originario in cui si ha la necessità di risolvere quello specifico
sottoproblema,
passando le informazioni su cui lavorare in quel preciso contesto.
Riassumendo, quindi, una procedura o una funzione è una sequenza di istruzioni che, partendo da
dati
di
input, risolve un sottoproblema specifico del problema originario, di dimensioni
ridotte.
Nello specifico:
- una procedura è una sequenza di istruzioni che, partendo da dati di input, esegue un compito, senza restituire risultati in output
- una funzione, invece, è una sequenza di istruzioni che, partendo da dati di input, esegue un calcolo e restituisce il risultato in output
Essendo un linguaggio ad oggetti, Java non possiede i concetti di funzione e procedura veri e propri, ma questi possono essere simulati attraverso i metodi statici, o metodi di classe, che approfondiremo dettagliatamente nel corso della programmazione ad oggetti (O.O.P.).
Al momento ci accontenteremo di sapere che i metodi statici costituiscono lo strumento per implementare funzioni e procedure in Java.
Nel dettaglio una procedura in Java può essere schematizzata come indicato di seguito:
public static void nomeProcedura(tipo1 parametro1, ... tipoN parametroN) {
// sequenza di istruzioni
// per compiere uno specifico lavoro
}
La parola chiave void prima del nome della procedura sta ad indicare che non viene restituito alcun risultato in output, infatti nel corpo della procedura non compare la parola chiave return.
Una funzione in Java può essere, invece, schematizzata come indicato di seguito:
public static tiporisultato nomeFunzione(tipo1 parametro1, ... tipoN parametroN) {
// sequenza di istruzioni
// per compiere uno specifico calcolo
return risultato; // di tipo tiporisultato
}
Il tiporisultato che precede il nome della funzione sta ad indicare questa restituirà un risultato in output del tipo tiporisultato. Questo è confermato dalla presenza, al termine delle istruzioni di calcolo, della parola chiave return, seguita dal risultato da restituire.