在 Jetpack Compose 中使用“content = { }”参数或直接使用“{}”有什么区别吗?

Is there any difference between using "content = { }" parameter or directly "{}" in Jetpack Compose?

提问人:Mister Propre 提问时间:10/6/2023 更新时间:10/6/2023 访问量:28

问:

我想知道直接使用“content = {}”参数而不是“{}”是否更好,尽管我看到人们更频繁地使用“{}”。

代码是否更干净,或者使用一个或另一个来加载代码更快? 有什么好的做法吗?

使用“{}”时

@Composable
fun MyComposable(){
Box{}
}

使用“content = {}”时

@Composable
fun MyComposable(){
Box(content = {})
}
参数 android-jetpack-compose 可读性 大括号

评论


答:

2赞 Abhimanyu 10/6/2023 #1

这里使用的概念是 Kotlin 尾随 lambdaKotlin 命名参数

Kotlin 命名参数

因此,这可以用命名参数来编写,

@Composable
fun MyComposable(){
    Box({})
}

喜欢这个

@Composable
fun MyComposable(){
    Box(content = {})
}

Kotlin 尾随 lambda

从文档中,

根据 Kotlin 约定,如果函数的最后一个参数是函数,则可以将作为相应参数传递的 lambda 表达式放在括号外

这意味着,

@Composable
fun MyComposable(){
    Box({})
}

@Composable
fun MyComposable(){
    Box() {}
}

都是一样的。

评论

0赞 Mister Propre 10/6/2023
多谢。很清楚。我正在研究这些不同的惯例。
1赞 Ayman Ait 10/7/2023
@MisterPropre,我只是想说的是,如果您为 exemple 创建了自己的函数,那么我强烈建议不要使用Kotlin 尾随 lamda,而是使用 kotlin 命名参数,因为您可能知道这个 lambda 对应关系,但另一个在您的团队中工作的人不会知道这一点,他们必须查找它等。这不是规则,而是一种节拍练习fun MyCustomButton(text:String, onClick: ()->Unit)onClick
0赞 Mister Propre 10/7/2023
是的,我会的。坦率地说,我保留了始终使用 Kotlin 命名参数的习惯。对于像我这样的初学者来说,这种方式使它变得非常清晰和有用。谢谢你的建议