Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

val или fun в Kotlin

#kotlin #lambda


Недавно начал писать на языке Kotlin и у меня возникло много вопросов о fun and val,
например, чем отличаются эти два случая:   


val handleMessage (Message) -> Unit = { message -> 
    /* do something here */ 
}  

fun handleMessage(message : Message){
    /* do something here*/
}



Я хотел бы узнать есть ли между ними какая-нибудь серьезная разница и почему я должен
в похожих случаях пользоваться одним, а не другим.

P.S. Я знаю что val immutable и обычно его используют для того, чтобы хранить данные
    


Ответы

Ответ 1



Большое спасибо @Grundy за помощь в поисках ответа. val handleMessage : (Message) -> Unit{ message -> /* do something */ } данный код создает новый класс: class A : (Message) -> Unit { override fun invoke(message : Message) { /* do something*/ } } Т.е. при обращении к лямбда выражению у нас создается новый класс и вызывается метод invoke с заданным параметром. В случае fun: fun handleMessage(message: Message){ /* do something*/ } данный код компилируется в следующий java-код: public class ExampleClass{ void handleMessage(Message message){ /* do something */ } } Итог: 1. fun - обыкновенная функция, которая превращается в обычный метод, в то время как val создает новый класс и вызывает его метод invoke с переданными параметрами. 2. Если вы пишите на Android, стоит избегать использования val лямбда выражений

Комментариев нет:

Отправить комментарий