Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android kotlin函数只有7个参数_Android_Kotlin_Sonarqube - Fatal编程技术网

Android kotlin函数只有7个参数

Android kotlin函数只有7个参数,android,kotlin,sonarqube,Android,Kotlin,Sonarqube,Sonarqube仅允许7个参数用于该功能。我有一个函数,它用8个参数组成字符串 fun example( context: Context, a: Int, b: Int, c: String, d: Int, e: String, list: List<String>, dat: String ) { a = d+b var f = a+b+d if (

Sonarqube仅允许7个参数用于该功能。我有一个函数,它用8个参数组成字符串

fun example(
        context: Context,
        a: Int,
        b: Int,
        c: String,
        d: Int,
        e: String,
        list: List<String>,
        dat: String
) {
a = d+b
var f = a+b+d
if (list >0){
f = f+ "example"
}
return c+ e + f + dat
}

如何获取
d
b
最新值,因为函数返回后这些局部变量将被销毁?。如何通过传递7个参数来提高此函数的效率。

您可以创建一个包含多个值的自定义数据模型

像这样

data class CustomModel(
var list:List<String>
var dat:String
)

现在调用函数example(),并将CustomModel(list,dat)传递到示例函数中的CustomModel参数中。

让我们从一个问题开始—为什么函数中的参数超过7个是件坏事

答案很简单——都是关于可读性的。 那么,我们能做些什么呢

1<代码>选项对象

数据类示例选项(
公共值p1:字符串,
...
公共值p10:Int=0
)
有趣的例子(选项:ExampleOpts){
}
这种方法更具可读性——函数签名表明它有很多参数,因此将它们提取到自己的结构中是一件好事

2。建筑商

当我们达到如此多的参数时,以某种方式验证方法之外的数据可能是好的。我们可以使用生成器来完成。这在kotlin中并不常见,因为构建器的许多优点都可以通过简单的数据类(如默认参数等)实现。然而,有时它可能是值得的,特别是当我们需要验证数据时

3。忽略这个问题:)

事实上,我们不应该将SonarQube(或任何其他linter)中的所有问题都视为必须解决的问题,因为这只是静态分析的结果。有时,拥有更多的参数只是一件正常的事情。例如:

正如我们在这个库中看到的,我们有比7更多的参数,这是非常非常好的

4。这不是为了减少参数数量,而是为了提高可读性。

如此多的参数表明实现可能有问题。快速查看一下实现,就会发现它确实如此

fun example(
        context: Context,
        a: Int,
        b: Int,
        c: String,
        d: Int,
        e: String,
        customModel: CustomModel
) {
    a = d + b
    var f = a + b + d
    if (customModel.list > 0) {
        f = f + "example"
    }
    
    return c + e + f + customModel.dat
}
上下文
-未使用

a
-不会编译,因为
a
在第一行重新声明(
val无法重新分配


所以,参数的数量并不总是一个问题——它只是一个暗示,可能有什么问题。由您来验证它,并在需要时进行修复。

我认为更好的方法是这样做。对参数数量的限制是因为可能存在影响代码可维护性的设计问题。如果通过使问题变得更复杂(比如在元组或列表中隐藏多个参数)来解决问题,那么问题只会变得更糟。与其挖一个更深的洞,不如忽略声纳警告。这不仅关乎可读性,还关乎单一责任原则。有这么多的参数是一个可能的设计问题的标志。
fun example(
        context: Context,
        a: Int,
        b: Int,
        c: String,
        d: Int,
        e: String,
        customModel:CustomModel
) {
a = d+b
var f = a+b+d
if (customModel.list >0){
f = f+ "example"
}
return c+ e + f + customModel.dat
}
fun example(
        context: Context,
        a: Int,
        b: Int,
        c: String,
        d: Int,
        e: String,
        customModel: CustomModel
) {
    a = d + b
    var f = a + b + d
    if (customModel.list > 0) {
        f = f + "example"
    }
    
    return c + e + f + customModel.dat
}