Πώς περιγράφονται οι συναρτήσεις σε 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")
}