고차 함수를 들어가기 앞서 ...
Unit의 개념과 어떤 방식으로 사용되는지 알아보자
void && Void -> 반환 타입이 없으므로 생략한다는 의미입니다
public static void main(String[] args){
}
fun returnTypeVoid(): Void? {
println("Trying with Void Return type")
}
Unit도 마찬가지로 아무것도 반환하지 않는 변환 타입 입니다
fun printHello(name: String?): Unit{
if (name != null) {
println("hello $name")
} else {
println("Hi")
}
}
함수 형식의 어떻게 자료형으로 나타낼까요?
(자료형, 자료형..) 패러미터 -> 자료형(반환값)
바로 코드로 봅시다
fun main(){
b(::a) // 고차함수로 넘길시에 :: 넣어줘야함
}
fun a (str: String){ //문자열은 받고 반환형이 없는 형태
println("$str 함수 a")
}
fun b (function : (String) -> Unit){
function("b가 호출한") // a 함수안에 주입될 파라매터 값
}
// b가 호출한 함수 a
// main -> b() -> a()
fun main(){
// 람다함수는 그자체가 고차함수이다 별도의 연산자 없이 변수에 담을수 있음
val c: (String) -> Unit = { str -> println("$str 람다함수)}
b(c)
}
fun a (str: String){
println("$str 함수 a")
}
fun b (function : (String) -> Unit){
function("b가 호출한")
}
// b가 호출한 함수 a
// main -> b() -> a()
composable(RallyScreen.Overivew.name){
OverviewBody(onClickSeeAllCounts = {navController.navigate(RallyScreen.Accounts.name)}
}
@Composable
fun OverviewBody(
onClickSeeAllAccounts: () -> Unit = {},
) {
AccountsCard(onClickSeeAllAccounts, onAccountClick = onAccountClick)
}
@Composable
private fun AccountsCard(onClickSeeAll: () -> Unit){
OverviewScreenCard(
onClickSeeAll = onClickSeeAll
)
}
@Composable
private fun <T> OverviewScreenCard(
title: String,
amount: Float,
onClickSeeAll: () -> Unit,
)
{
SeeAllButton( ){
onClick = onClickSeeAll)
}
}
정리 하자면 android 고차함수는 여러가지 상황에서 많이 쓰인다
compose 로 예로 들자면 주로 상태호이스팅
즉, onClick라는 신호를 받을시에 위로 신호를 보내 함수로 전달해주는대 주로 사용이 된다
순서
OverviewScreenCard() -> AccountCard() -> OverViewBody() ->navigation compoasable()