Sobes.tech
Junior

Comment décrire des fonctions en Kotlin?

sobes.tech IA

Réponse de l'IA

Les fonctions sont déclarées à l'aide du mot-clé fun, suivi du nom de la fonction, d'une liste de paramètres entre parenthèses (optionnelle), deux-points et du type de retour (optionnel). Le corps de la fonction est entre accolades. Si le type de retour est omis, la fonction retourne Unit (équivalent à void dans d'autres langages).

// Fonction sans paramètres ni valeur de retour
fun greet() {
    println("Hello!")
}

// Fonction avec paramètres
fun add(x: Int, y: Int): Int {
    return x + y
}

// Fonction avec une seule expression (syntaxe de corps abrégé)
fun multiply(a: Int, b: Int) = a * b

Les paramètres de la fonction sont déclarés au format nomParamètre: Type. Il est possible de spécifier des valeurs par défaut pour les paramètres.

fun sendMessage(message: String, sender: String = "Unknown") {
    println("$sender: $message")
}

Les fonctions peuvent être déclarées au niveau supérieur du fichier ou comme membres de classes, objets ou interfaces.

  • Fonctions de niveau supérieur : Déclarées en dehors des classes.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Fonctions membres : Déclarées à l'intérieur des classes.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Fonctions d'extension : Permettent d"ajouter" des fonctions aux classes existantes sans modifier leur code source.

    fun String.reverseAndUpperCase(): String {
        return this.reversed().toUpperCase()
    }
    

Les expressions lambda et les fonctions anonymes sont des littéraux fonctionnels qui peuvent être passés en argument ou assignés à des variables.

val sum: (Int, Int) -> Int = { x, y -> x + y }
val greeting = { name: String -> "Hello, $name!" }

Les fonctions d'ordre supérieur acceptent des fonctions en paramètres ou retournent des fonctions.

fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

val result = operate(5, 3, { x, y -> x * y }) // result = 15

La surcharge de fonctions (différentes fonctions avec le même nom mais des signatures différentes) est supportée automatiquement.

fun printInfo(name: String) {
    println("Name: $name")
}

fun printInfo(age: Int) {
    println("Age: $age")
}