知道在Kotlin / Java函数中,对象是作为其引用的副本传递的。我想知道Option 2
是否比Option 1
好。我认为在某些情况下Option 1
更具可读性,但是我不确定它是否有任何缺点。
选项1
fun modifyListFunction(someList: List): List {
// modifify items in someList
return someList
}
someList = modifyListFunction(someList)
someList = modifyListFunction2(someList)
someList = modifyListFunction3(someList)
选项2
fun modifyListFunction(someList: List) {
// modifify items in someList
}
modifyListFunction(someList)
modifyListFunction2(someList)
modifyListFunction3(someList)
答案 0 :(得分:1)
当一个函数返回一个对象时,那么阅读程序的程序员将理解该函数是获取某个对象所必需的。如果您对函数内部的对象执行返回void的操作,那么如果您不阅读该函数,将无法了解此函数是否会影响传递给它的对象。另外,第二种方法增加了出错的可能性。
通常,您必须遵守以下规则:“如果要更改输入数据并对它们做进一步的处理,则该函数应返回结果。如果输入数据仅用于从中读取任何信息,则可以不返回空”
答案 1 :(得分:0)
我建议使用Kotlin的扩展功能。结果类似于选项1 ,但可读性更高,链接起来也更容易。
fun main() {
val list = listOf(Type())
list.func().func2().func3()
}
class Type
fun List<Type>.func(): List<Type> {
// modify list
return this // returns list
}
fun List<Type>.func2() = this
fun List<Type>.func3() = this
答案 2 :(得分:0)
通常,阅读选项1签名的程序员将期望返回一个新列表。因此,如果要更改列表,请不要返回任何内容(选项2)。如果创建新列表,请返回新列表。
仅当语义确实使您明显返回相同的对象时,才应使用选项1(例如,您正在构建明显用于链接的API,例如构建器)。
但是,如果是这样的话,我可能会选择扩展功能,并让someList
成为接收者而不是参数。
但是请注意,以这种方式使用集合类型并不常见,因此您可能不在情况下选择选项1。