#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 лямбда выражений
Комментариев нет:
Отправить комментарий