Temps : 30, 10, 20 min.
Diffiulté : *
Cette partie approfondie le concept de fonction avec le langage Kotlin :
En Kotlin, la déclaration de fonction a plusieurs syntaxes.
Elle peut être écrite en expression simple, Single-expression functions, lorsque le corps de la fonction ne
fait pas plus d'une ligne.
La syntaxe est alors caractérisé par la présence du symbôle égal =
.
Fun.kt
, définissez la fonction showAquarium()
package beach.aqua
fun showAquarium() = println("This is an aquarium.")
showAquarium()
et affichez-là, depuis main()
package beach.aqua
...
fun main() {
val isUnit = showAquarium()
println(isUnit)
}
main()
(Control + Shift + R)Note : En Kotlin, tout a une valeur, sauf les boucles, ici le type kotlin.Unit
est renvoyé.
En Kotlin, un extrait de code peut être enregistrée directement dans une variable.
main()
, déclarez une variable immuable et assignez lui un extrait de code if else
package beach.aqua
...
fun main() {
val temperature = 10
val isHot = if (temperature > 50) true else false
println(isHot)
}
main()
En Kotlin, une fonction contient généralement un corps entre ses accolades et déclare optionnellement :
(nb: Int)
:
, à la suite des paramètresFun.kt
, déclarez une fonction dont le type de retour est String
fun randomBeach() : String {
val beachArray = arrayOf("Plage des Rochers", "Praia de Carcavelos", "Playa de la Barceloneta", "Plage des ondes", "Copacabana", "Ipanema", "Bahamas")
return beachArray[Random.nextInt(beachArray.size)]
}
nextInt()
sur Random
est définie dans kotlin.random.Random
. Ajoutez l'importation nécessaire :
package beach.aqua
import kotlin.random.Random
randomBeach()
dans la fonction main()
, puis exécutez là
package beach.aqua
...
fun main() {
println(randomBeach())
}
Int
et un type de retour String
:
fun whereIsAquarium(aquariumId: Int) : String {
val beachArray = arrayOf("Plage des Rochers", "Praia de Carcavelos", "Playa de la Barceloneta", "Plage des ondes", "Copacabana", "Ipanema", "Bahamas")
val beach : String
when (aquariumId) {
1 -> beach = beachArray[3]
2 -> beach = beachArray[0]
3 -> beach = beachArray[5]
4 -> beach = beachArray[4]
5 -> beach = beachArray[1]
else -> beach = beachArray[2]
}
return beach
}
whereIsAquarium(3)
dans la fonction main()
, puis exécutezbeach
dans whereIsAquarium()
?whereIsAquarium()
?Une fonction peut préciser un ou plusieurs paramètre·s par défaut
(example de signature : fun move(dx: Int = 5, dy: Int = 5)
).
Lorsqu'il y a plusieurs paramètres dont certain·s ont une valeur précisée par défaut,
le nommage est obligatoire, lors de l'appel de la fonction.
En Kotlin, une expression lambda décrit une fonction,
elle est remarquable avec ses accolades { }
.
Tout comme les fonctions anonymes, elle n'a pas de nom.
L'intérêt est de passer cette une expression comme une donnée.
Par ailleurs, les règles de syntaxes lui étant associées permettent d'épurer le code :
{ paramètres -> corps }
btn.setOnClickListener({ v: View -> println("H!") })
btn.setOnClickListener({ v -> println("H!") })
btn.setOnClickListener() { v -> println("H!") }
btn.setOnClickListener { v -> println("H!") }
it
si besoin) btn.setOnClickListener { println("H!") }
main
du fichier Fun.kt
, stockez une expression lambda
dans une variable et affichez le résultat :
var cleanLevel = 10
val waterFilter = { clean: Int -> clean / 2 }
println(waterFilter(cleanLevel))
val waterFilter: (Int) -> Int = { clean -> clean / 2 }
En Kotlin, l'extension permet d'étendre une classe existante avec :
main
du fichier Fun.kt
, écrivez une fonction d'extension pour le type String
:
fun String.hasSpaces(): Boolean {
val found = this.indexOf(' ')
return found != -1
}
println("to to".hasSpaces())
println("toto".hasSpaces())
fish
créez une classe AquariumPlant
:
class AquariumPlant(val color: String, private val size: Int)
color
:
fun AquariumPlant.isRed() = color == "red"
fun makeAquaPlant(){
val plant = AquariumPlant("red", 33)
println(plant.isRed())
}
private
:
fun AquariumPlant.isBig() = size > 50
AquariumPlant
:
val AquariumPlant.isGreen: Boolean
get() = color == "green"
null
:
fun AquariumPlant?.pull() {
this?.apply {
println("removing $this")
}
}
Finalement, Kotlin est un langage de programmation fonctionnelle et orientée objet par rapport à :
Unit
, sauf l'exception ?
val beachArray = arrayOf("Plage des Rochers", "Praia de Carcavelos", "Playa de la Barceloneta", "Plage des ondes", "Copacabana", "Ipanema", "Bahamas")
fun whereIsAquarium(aquariumId: Int = 3) : String {
return when (aquariumId) {
1 -> beachArray[3]
2 -> beachArray[0]
3 -> beachArray[5]
4 -> beachArray[4]
5 -> beachArray[1]
else -> beachArray[2]
}
}