kotlin-style-guide
kotlin-style-guide copied to clipboard
Разрешить вызывать лямбды без явного вызова `invoke`
С приходом Compose лямбды теперь передаём в параметрах чаще и необходимость явно прописывать invoke
, как мне кажется, только усложняет чтение кода.
Пример:
@Composable
fun ProfileScreenContent(
header: @Composable LazyItemScope.() -> Unit,
body: LazyListScope.() -> Unit,
footer: @Composable LazyItemScope.() -> Unit,
) {
LazyColumn {
item(content = header)
// Что тут происходит? Передаём параметр в лямбду?
// А, нет. Передаём контекст, на котором нужно вызвать лямбду
body.invoke(this@LazyColumn)
// При этом не вижу проблем с вызовом без invoke, исчезает куча лишней информации
body()
item(content = footer)
}
}
Я в очередной раз забыл какие были аргументы за то чтобы явно вызывать invoke
, хорошо если кто-нибудь напишет их в комментариях.
В общем тоже за разрешение.
Обычно только по контексту понятно где стоит c invoke, а где нет. У меня бывали примеры когда лучше что-то с invoke, но это не про лямбды было. Были UseCase, в которых один метод-оператор invoke. Типа удобно вызывать казалось. Но стоит ли вызывать doSomethingUsefulUseCase()
или doSomethingUsefulUseCase.invoke()
- спорно, мне с invoke понятнее что происходит.
Но, как видно, зависит от того чем является сущность которую мы вызываем так. Относительно лямбды - она по факту функция и почему бы не вызывать как функцию.
@Jeevuz случай когда решили в UseCase делать operator invoke
, кажется, должен разруливаться на уровне договорённостей внутри проекта. И либо использовать короткий вызов через скобки, либо не добавлять к invoke
ключевое слово operator
и использовать как вызов функции. Т.к. смысл в добавлении operator
есть только тогда, когда эта функция используется как оператор.
Если в случае UseCase использование оператора спорно, то для функциональных интерфейсов, самое то.
Дада, я и привел пример случая когда может казаться спорным. А с лямбдой наоборот кажется то что надо.
Кажется лайки есть, и против никто не высказался. Имхо, можно бы сделать PR @osipxd