Android 如果不总是需要变量,使用lambda是否更好?
我有一个类,无论发生什么都可以加载,但只要单击就需要一个参数。总是将参数传递给类还是传递lambda并在单击时调用它更好 例如:Android 如果不总是需要变量,使用lambda是否更好?,android,kotlin,memory-management,lambda,android-viewmodel,Android,Kotlin,Memory Management,Lambda,Android Viewmodel,我有一个类,无论发生什么都可以加载,但只要单击就需要一个参数。总是将参数传递给类还是传递lambda并在单击时调用它更好 例如: class ItemViewModel(item: ProductItem, private val index: Int, private val title: String?){ fun onItemClick() = foo(title) } 或 您的问题和代码示例是一体的
class ItemViewModel(item: ProductItem,
private val index: Int,
private val title: String?){
fun onItemClick() = foo(title)
}
或
您的问题和代码示例是一体的
?
标记将参数设置为可选参数(您正在这样做)。
这意味着此函数的调用者可以将null
作为值传递,并且该函数应按预期工作null
(或某个值),并且您不在乎它们是否传递,并且您想让客户端更容易调用此函数而不必传递参数,那么您可以将参数标记为?=空
。
例如:
class ItemViewModel(item: ProductItem,
private val index: Int,
private val title: String? = null){
fun onItemClick() = foo(title)
}
但是请记住,对于本例,函数foo
还必须接受一个可能的null
值
或:
这意味着您现在可以将其称为ItemViewModel(ProductionItem.SomeItem,1)
。不需要第三个参数(但如果您确实传递了一个参数,则仍然接受该参数)
foo
函数的响应我真的很困惑:)展示你正在谈论的代码,不要害羞。此外,传递“变量”通常不需要担心(假设您不打算创建4GB字符串…)。这不是一个非常紧迫的问题,在我写这篇文章时,我认为答案将是传递变量,因为它更具可读性。我更喜欢lamba方法,但在大多数情况下,这不重要,更多的是基于具体情况。似乎您担心过早优化。依我看,您应该始终努力编写一个简单而干净的代码,然后担心(在大多数情况下您不担心)任何优化。通过老式的方式传递前两个参数,然后将最后一项作为lambda传递,这可能会打破人们可能会说的“规范”。在本例中,使用lambda而不是传统方法不会带来性能方面的好处。TBH,该类不提供读者信息,因为它需要3个参数。If首先会担心分离关注点,即担心使其更具内聚性。Lambda实际上可能比字符串花费更多内存,因为在JVM字节码中,它由
对象表示。默认值或null在这种情况下不起作用,因为用户可以随时单击该项。我不知道何时初始化用户是否要单击。最好的做法似乎是始终传递字符串以保持清晰,并防止不必要地创建更大的对象。对不起,我试图解释如何设置默认值,因为这是OP询问的问题之一。实际用例可能是一个错误的例子。
class ItemViewModel(item: ProductItem,
private val index: Int,
private val title: String? = null){
fun onItemClick() = foo(title)
}
class ItemViewModel(item: ProductItem,
private val index: Int,
private val title: String? = "Default title"){
fun onItemClick() = foo(title)
}