在Kotlin中,这两个函数调用有什么区别?

3pvhb19x  于 2022-12-04  发布在  Kotlin
关注(0)|答案(3)|浏览(138)

第一种方式

fun add(a: Int, b: Int): Int {
    return a + b
}

fun main() {
    print(add(a = 2, b = 3))
}

第二种方式

fun add(a: Int, b: Int): Int {
    return a + b
}

fun main() {
    print(add(2, 3))
}

这两个函数的最终结果是相同的,但我想知道这两种函数调用方式之间是否有任何内部差异。

6jjcrrmo

6jjcrrmo1#

在第一种情况下,你要明确地指定要将值赋给add()方法构造函数的哪个字段。这样,只要每个值都明确地赋给了一个参数,你就可以不考虑赋值的顺序。例如,在这种情况下,你也可以写:

print(add(b=3, a=2))

仍然有效。
相反,在第二种方法中,您必须遵循在方法实现中写入字段的顺序(第一个值隐式分配给a,第二个值分配给B,依此类推)

m4pnthwp

m4pnthwp2#

对于此示例,没有区别,因为您是按顺序添加参数的
add(a=2,b=3):这里a将取2,b将取3
add(2,3):这里a是第一个参数,所以它将接受第一个传递的参数,即2,对于b也是如此
但是这里有一个区别(a + b == b + a所以我加上一个减函数来看看区别,因为a - b!= b - a):

fun minus(a : Int,b:Int):Int{
    return a-b;
}
fun main()
{
    print(minus(a=2,b=3)) // a = 2, b = 3 -> a - b = 2 - 3 = -1
    print(minus(b=2,a=3)) // a = 3, b = 2 -> a - b = 3 - 2 = 1
    print(minus(2,3)) // a = 2, b = 3 -> a - b = 2 - 3 = -1
}

所以如果你把minus(a=2,b=3)加起来,你就等于a取2,b取3,
这里minus(2,3)表示第一个参数(a)取2,第二个参数(b)取3
但是,假设由于某种原因,您更改了函数参数的顺序:

fun add(b : Int,a:Int):Int{
    return a+b;
}

现在,如果添加minus(a=2,b=3),则a将取2,而b将取3,因此对于这种情况没有任何变化,您的代码将正常工作。
但是在这里minus(2,3)你说的是第一个参数(b)要取2,第二个参数(a)要取3,所以在改变函数的参数顺序之前你不会得到相同的结果。所以当你调用函数时,添加参数名称是一个最好的做法,告诉你想要这个参数的值。
还有一个例子,假设你有一个函数,它有默认值:
趣味测验(a:Int = 10,B:Int = 5):Int {返回a+b;}
所以你可以像test()那样调用它,不需要传递任何参数,但是假设你只想把b改为15,如果你写test(15)a会取15而不是b,所以这里你需要指定15是b的:test(b = 15)

bmp9r5qi

bmp9r5qi3#

没有区别,唯一的区别是在第一个示例中使用命名参数时的可读性。
在调用方法时使用命名参数的有趣之处在于,您还可以更改顺序,甚至可以省略某些默认值,例如:

fun add(a :Int,b: Int):Int {
    return a+b;
}

也可以像这样用默认值编写:

fun add(a :Int = 2,b: Int = 3, c: Int = 4):Int {
    return a+b+c;
}

现在您可以跳过一些值,如下所示:

fun main() {
    print(add(a = 2, c = 3))
}

// So we did 2 + 3 + 3
// prints 8
// Notice we skipped b

相关问题