Kotlin: funzioni semplici e ricorsive

Una funzione è un blocco di codice utilizzato per eseguire un determinato compito. Le funzioni sono utilizzate pertanto per spezzare il programma in differenti sotto-moduli rendendo il codice snello e riusabile. In Kotlin le funzioni sono dichiarate utilizzando la keyword fun. Ci sono due tipi di funzioni a seconda che esse siano definite dall’utente o meno:

  • Standard Library Function : funzione disponibile nella libreria standard (built-in library functions). Queste, se presenti nella libreria, sono pronte e disponibili all’uso. Esempio di utilizzo sono la print(“esempio”) o la Math.sqrt(15.7). In questo ultimo caso viene creata un’istanza della classe Math e chiamato il metodo sqrt.
  • User Defined Function : funzione definita dall’utente e ampiamente descritta in questo articolo.

Funzioni

Le funzioni definite dall’utente sono quelle appunto scritte dallo sviluppatore software e che vanno ad aggiungersi a quelle della Standard Library. Tali funzioni sono definite a partire da un insieme di parametri in ingresso. Su di essi la singola funzione opera restituendo un risultato.  Un esempio di dichiarazione di funzione è:

fun functionName() {
//corpo della funzione
}

La funzione così dichiarata può essere chiamata all’interno di un’altra funzione come:

functionName()

Le funzioni definite dall’utente possono essere dichiarate prima o dopo il loro utilizzo. Negli esempi però non abbiamo parametri in ingresso ne valori di ritorno. Nel caso invece in cui abbiamo dei parametri in ingresso, questi devono essere indicati utilizzando la notazione Pascal ovvero nome del parametro seguito dal suo tipo. Ogni parametro è separato dagli altri da virgole. Se una funzione non ritorna nulla allora il suo tipo di ritorno è Unit. Il tipo di ritorno è comunque opzionale nel caso in cui una funzione non ritorna nessun valore. La sintassi generale è quindi la seguente:

fun functionName(param1 : type1, param2 : type2, … , paramN : typeN) : returnType { //corpo della funzione}

Per tornare un valore si usa la keyword return seguita dal valore. Ricordiamo che in Kotlin i parametri passati quando si chiama una funzione devono essere del tipo esatto indicato nella firma della stessa in fase di dichiarazione.

Funzioni ricorsive

Una funzione ricorsiva è una funzione espressa in termini di se stessa, ovvero l’esecuzione della funzione su un insieme di dati comporta la semplificazione o suddivisione dell’insieme di dati e l’applicazione della stessa funzione agli insiemi di dati semplificati. Ovviamente in Kotlin è possibile scrivere funzioni ricorsive che hanno la forma:

fun functionName() {
functionName()
}

La tail recursion function è una funzione ricorsiva la cui chiamata a se stessa è l’ultima istruzione eseguita. Queste funzioni, a differenza della ricorsione semplice sono maggiormente ottimizzate dal compilatore e pertanto sono da preferirsi. Infatti le funzioni ricorsive semplici non possono essere chiamate molte volte altrimenti si rischia di cadere nell’eccezione “java.lang.StackOverflowError”.

Default

Non tutti gli argomenti di una funzione devono essere specificati. Molti di questi infatti possono assumere dei valori di default. Per associare i valori di default si usa la sintassi:

fun functionName(param1 : type1 = value1, param2 : type2, … , paramN : typeN = valueN) : returnType { //corpo della funzione}

L’utilizzo dei default permette di semplificare il codice riducendo il numero di overload. Metodi ovverridati utilizzano lo stesso default del metodo base, in ogni caso non possono overridare il default che pertanto non deve essere indicato nella firma della funzione. Non è necessario che i default siano tutti i primi parametri. L’accesso a variabili non di default può infatti in Kotlin essere effettuato grazie ai nomi degli argomenti.

Nomi degli argomenti

Quando in Kotlin si dichiara una funzione è possibile attribuire un nome ad ogni argomento. In questo modo oltre al passaggio dei valori agli argomenti per via posizionale, in Kotlin è possibile passarli anche indicandone il nome. Per chiamare una funzione passando gli argomenti per nome è possibile utilizzare la seguenti sintassi:

functionName(param1 = value1, param2 = value2, … , paramN = valueN)

Per maggiori informazioni visitate https://kotlinlang.org/docs/functions.html .

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.