Funkcie vyššieho rádu sú funkcie, ktoré prijímajú alebo vracajú iné funkcie. V Compose ich používame veľmi často, napríklad callbacky pre kliknutia:
import androidx.compose.material3.*
import androidx.compose.runtime.*
// Funkcia vyssieho radu - prijima funkciu ako parameter
fun performAction(times: Int, action: () -> Unit) {
repeat(times) { action() }
}
// Callback - funkcia ako parameter
@Composable
fun ClickCounter(onClick: () -> Unit) {
Button(onClick = onClick) {
Text("Klikni ma")
}
}
@Composable
fun App() {
var count by remember { mutableStateOf(0) }
// Lambda { count++ } je funkcia, ktoru predame do Button
ClickCounter(onClick = { count++ })
Text("Pocet kliknuti: $count")
}
Lambda je skrátený zápis anonymnej funkcie:
// Plna forma
val add = { a: Int, b: Int -> a + b }
// Skratena forma (ak je posledny parameter lambda)
fun doSomething(name: String, action: () -> Unit) {
action()
}
doSomething("Test") { println("Hello") }
// Skratena forma (ak je jediny parameter lambda)
fun repeat(n: Int, action: (Int) -> Unit) {
for (i in 0..<n) action(i)
}
repeat(5) { i -> println(i) }
V Compose sú callbacky takmer vždy lambdy:
Button(onClick = { /* co sa stane po kliknuti */ }) {
Text("Klikni")
}
TextField(
value = text,
onValueChange = { newText -> text = newText } // lambda
)
Lambda je funkcia bez mena. V Compose sa používa pre všetky interakcie.
Napíš funkciu vyššieho rádu, ktorá prijme číslo a lambda funkciu na jeho spracovanie.
Vytvor composable tlačidlo, ktoré prijme onClick callback ako parameter.
Odovzdaj tlačidlu lambdu, ktorá zmení stav počítadla a zobraz aktualizovanú hodnotu.