Skip to content

Commit 8776acf

Browse files
Merge pull request #28 from EmogurovAnton/feature/issue-22
Поправил пункт с вызовом лямбд без использования invoke
2 parents 71628d6 + c175a8c commit 8776acf

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

README.md

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,18 +167,32 @@ setAdditionalArguments(arguments = null)
167167

168168
### Вызов переменной функционального типа
169169

170-
Всегда использовать полный вариант с написанием `invoke` у переменной вместо использования сокращенного варианта:
170+
Допускается вызов лямбды как с `invoke`, так и сокращенный вариант `()`, если отсутствуют договоренности внутри проекта. Однако явный `invoke` имеет ряд преимуществ:
171+
172+
> [!TIP]
173+
> Одной из основных причин использования явного `invoke` является концептуальное разделение функции как члена класса и лямбды как входного параметра функции.
174+
> Используя `invoke` явно, мы показываем, что используем лямбду, а не функцию.
175+
>
176+
> При этом дополнительным аргументом к использованию `invoke` является его заметность. Вызывая лямбду без `invoke`, у нее можно потерять скобки в месте вызова, что приведет к некорректному поведению.
171177
172178
```kotlin
173-
fun runAndCall(expression: () -> Unit): Result {
174-
val result = run()
179+
@Composable
180+
fun ProfileScreenContent(
181+
header: @Composable LazyItemScope.() -> Unit,
182+
body: @Composable LazyListScope.() -> Unit,
183+
footer: @Composable LazyItemScope.() -> Unit,
184+
) {
185+
LazyColumn {
186+
item(content = header)
175187

176188
// Bad
177-
expression()
189+
body
178190
// Good
179-
expression.invoke()
191+
body()
192+
body.invoke(this@LazyColumn)
180193

181-
return result
194+
item(content = footer)
195+
}
182196
}
183197
```
184198

0 commit comments

Comments
 (0)