Sobes.tech
Junior

Πώς περιγράφονται οι συναρτήσεις σε Kotlin;

sobes.tech AI

Απάντηση από AI

Οι συναρτήσεις δηλώνονται με τη λέξη-κλειδί fun, ακολουθούμενη από το όνομα της συνάρτησης, τη λίστα παραμέτρων σε παρένθεση (προαιρετικά), δύο τελείες και τον τύπο επιστροφής (προαιρετικά). Το σώμα της συνάρτησης βρίσκεται σε αγκύλες. Αν παραλειφθεί ο τύπος επιστροφής, η συνάρτηση επιστρέφει Unit (ισοδύναμο με void σε άλλες γλώσσες).

// Συνάρτηση χωρίς παραμέτρους και χωρίς τιμή επιστροφής
fun greet() {
    println("Hello!")
}

// Συνάρτηση με παραμέτρους
fun add(x: Int, y: Int): Int {
    return x + y
}

// Συνάρτηση με μία έκφραση (συντομευμένη σύνταξη)
fun multiply(a: Int, b: Int) = a * b

Οι παράμετροι της συνάρτησης δηλώνονται στη μορφή όνομαΠαράμετρος: Τύπος. Μπορούν να οριστούν προεπιλεγμένες τιμές για τις παραμέτρους.

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

Οι συναρτήσεις μπορούν να δηλωθούν σε επίπεδο αρχείου ή ως μέλη κλάσεων, αντικειμένων ή διεπαφών.

  • Συναρτήσεις επιπέδου κορυφής: Δηλώνονται εκτός κλάσεων.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Μέλη συναρτήσεων: Δηλώνονται μέσα σε κλάσεις.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Επεκτάσεις συναρτήσεων: Επιτρέπουν την "προσθήκη" συναρτήσεων σε υπάρχουσες κλάσεις χωρίς να αλλάξουν τον πηγαίο κώδικα.

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

Οι εκφράσεις lambda και οι ανώνυμες συναρτήσεις αποτελούν λειτουργικούς λογιθμούς που μπορούν να μεταβιβαστούν ως ορίσματα ή να ανατεθούν σε μεταβλητές.

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

Οι συναρτήσεις ανώτερου επιπέδου δέχονται συναρτήσεις ως παραμέτρους ή επιστρέφουν συναρτήσεις.

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

val result = operate(5, 3, { x, y -> x * y }) // αποτέλεσμα = 15

Η υπερφόρτωση συναρτήσεων (διαφορετικές συναρτήσεις με το ίδιο όνομα αλλά διαφορετικές υπογραφές) υποστηρίζεται αυτόματα.

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

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