在 JetpackCompose 中,我们看到所有内置的可组合项都有扁平化输入,这是有目的的吗?或者用数据 class 包装输入具有相同的性能?
In JetpackCompose we see all built in composables have flatten inputs,is it with purpose? or wrapping the inputs with data class has same performance?
在 Jetpack Compose 中,我们看到所有内置可组合项都有扁平化输入,这是有意为之吗?或者用数据 class 包装太多输入(这是良好而干净的做法)具有相同的性能?
考虑这个样本
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
将输入作为数据 class 或在性能(重组)中扁平化输入发送会更好吗?或者有相同的结果?
换句话说,当我们向可组合函数发送一个数据class,而我们只改变它的一个成员时,是否会导致整个函数重构?
或者重组明智,它具有与使用扁平化输入时相同的性能?
预先感谢您的帮助。
我认为选择一个或另一个对性能的影响很小。我认为 Compose 开发人员只是不认为数据 classes 作为最佳路由的参数,我同意。
我不明白这是怎么回事:
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
比这个更好:
@Composable
fun SettingsItem(
title: String,
description: String? = null,
@DrawableRes imageResId: Int? = null,
isChecked: Boolean? = null,
showDivider: Boolean = true,
onItemClicked: () -> Unit = {},
onCheckedChange: (isChecked: Boolean) -> Unit = {},
buttonLabel: String? = null,
onButtonClicked: () -> Unit = {},
modifier: Modifier = Modifier
) {
...
}
让数据 class 参与与具有大量参数的 compose 函数的每次交互只会给您的代码增加不必要的复杂性。它为阅读文档、调用函数和对代码库的整体理解增加了更多障碍,其唯一好处是函数声明括号内的代码更少(但其他地方的代码更多)。
在 Jetpack Compose 中,我们看到所有内置可组合项都有扁平化输入,这是有意为之吗?或者用数据 class 包装太多输入(这是良好而干净的做法)具有相同的性能?
考虑这个样本
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
将输入作为数据 class 或在性能(重组)中扁平化输入发送会更好吗?或者有相同的结果?
换句话说,当我们向可组合函数发送一个数据class,而我们只改变它的一个成员时,是否会导致整个函数重构? 或者重组明智,它具有与使用扁平化输入时相同的性能?
预先感谢您的帮助。
我认为选择一个或另一个对性能的影响很小。我认为 Compose 开发人员只是不认为数据 classes 作为最佳路由的参数,我同意。
我不明白这是怎么回事:
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
比这个更好:
@Composable
fun SettingsItem(
title: String,
description: String? = null,
@DrawableRes imageResId: Int? = null,
isChecked: Boolean? = null,
showDivider: Boolean = true,
onItemClicked: () -> Unit = {},
onCheckedChange: (isChecked: Boolean) -> Unit = {},
buttonLabel: String? = null,
onButtonClicked: () -> Unit = {},
modifier: Modifier = Modifier
) {
...
}
让数据 class 参与与具有大量参数的 compose 函数的每次交互只会给您的代码增加不必要的复杂性。它为阅读文档、调用函数和对代码库的整体理解增加了更多障碍,其唯一好处是函数声明括号内的代码更少(但其他地方的代码更多)。