Richiami di Metodi in Kotlin
Ricordiamo che in Kotlin esistono due tipi di metodi (o funzioni):
Tipo di metodo | Sintassi di richiamo | Sintassi di dichiarazione |
---|---|---|
Di istanza o di oggetto | nomeIstanza.nomeMetodo(...) | All’interno di una classe o un oggetto: |
Top Level | nomeMetodo(...) | All'esterno di una classe o un oggetto: |
Vediamo quindi alcuni esempi di funzione:
fun printSuper (s : String) {
if(s != "") {
print(s)
}
}
class Printer(val s : String) {
fun printSuper () {
if(s != "") {
print(s)
}
}
}
object PrintSuper {
fun printSuper (s : String) {
if(s != "") {
print(s)
}
}
}
Le funzioni top level vengono citate anche nella mia introduzione a Kotlin. Ricordo che, come detto nella lezione sui Metodi se il corpo produce un risultato, ogni possibile ramo del flusso del codice deve restituire qualcosa o lanciare un’eccezione:
class Printer2(val s : String) {
fun printSuper () : Boolean {
if(s != "") {
print(s)
return true
}
return false
}
}
fun printSuper (s : String) : Boolean {
if(s != "") {
print(s)
return true
}
return false
}
object PrintSuper {
fun printSuper (s : String) : Boolean{
if(s != "") {
print(s)
return true
}
return false
}
}
Se invece il corpo non produce nessun risultato esso è un metodo che ritona un Unit (leggasi void per chi conosce il Java, C# o C/C++). Fino ad adesso se la funzione non torna niente abbiamo omesso il tipo di ritorno. Lo possiamo ancora fare in quanto queste due funzioni sono identiche:
fun main(args: Array<String>) : Unit {
println("Digita la dimensione del primo lato")
var array = arrayOfNulls<Int>(3)
array[0] = readLine()!!.toIntOrNull()
println("Digita la dimensione del secondo lato")
array[1] = readLine()!!.toIntOrNull()
println("Digita la dimensione del terzo lato")
array[2] = readLine()!!.toIntOrNull()
if (null in array) {
println("Errore uno o più lati non sono stati inseriti correttamente")
return
}
when (array.distinct().size) {
1 -> println("triangolo equilatero")
2 -> println("triangolo isoscele")
3 -> println("triangolo scaleno")
}
return
}
È uguale a:
fun main(args: Array<String>) {
println("Digita la dimensione del primo lato")
var array = arrayOfNulls<Int>(3)
array[0] = readLine()!!.toIntOrNull()
println("Digita la dimensione del secondo lato")
array[1] = readLine()!!.toIntOrNull()
println("Digita la dimensione del terzo lato")
array[2] = readLine()!!.toIntOrNull()
if (null in array) {
println("Errore uno o più lati non sono stati inseriti correttamente")
return
}
when (array.distinct().size) {
1 -> println("triangolo equilatero")
2 -> println("triangolo isoscele")
3 -> println("triangolo scaleno")
}
return
}