Functii
- pot fi standalone (in afara unei clase)
- introduse prin fun
- pot avea parametri by default
- pot extinde tipuri deja existente
- pot fi chemate din Java (import pachetul de kotlin si chemare ca functie statica)
@file:JvmName("DisplayFunctions") // redenumire oficiala a clasei in Kotlin, pt a putea chema din Java:
DisplayFunctions.display("ce vrei tu");
fun max(a: Int, b: Int) : Int = if (a > b) a else b // function expression
println(max(1,2))
Parametri default
@JvmOverloads // ca sa poata fi chemata din Java cu sau fara parametrul optional// Java va crea o metoda cu un singur parametru & una cu 2 parametri
fun log(message: String, logLevel: Int = 1) {
println("$message | $logLevel")
}
log("Salut")
Denumirea parametrilor (Java nu suporta)
- pentru a ii putea da in orice ordine si ajuta la dezambiguizare atunci cand exista mai multi parametri optionali
log(logLevel = 2, message = "Salut")
Functii care extind
Idee: adăugare funcții la clase existente -> devin funcții statice; util pentru funcții utilitare de moment.
println("Salux Pexri".replaceX())
fun String.replaceX(): String { // extinde in clasa String
return this.replace("x", "t")
}
Funcții INFIX
- prefixate cu infix, au un singur parametru
class Header(var name: String) {}
infix fun Header.plus(other: Header): Header {
return Header(this.name + " " + other.name)
}
var h1 = Header("Petri")
var h2 = Header("Mimi")
val h3 = h1 plus h2
println(h3.name) // Petri Mimi
Operator overloading
operator infix fun Header.plus(other: Header): Header {
return Header(this.name + " " + other.name)
}
val h4 = h1 + h2
Funcții foarte recursive
tailrec - cuvânt-cheie pus înainte de fun atunci când știm că vor avea loc prea multe apeluri recursive, iar Kotlin le va transforma intern într-o buclă; pentru evitarea stack overflow
Niciun comentariu:
Trimiteți un comentariu