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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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
Kotlin 这些定义函数的方法有什么区别?_Kotlin - Fatal编程技术网

Kotlin 这些定义函数的方法有什么区别?

Kotlin 这些定义函数的方法有什么区别?,kotlin,Kotlin,我来自Javascript的背景,试图学习一些Kotlin 我知道我可以通过 fun add(a: Int , b: Int): Int{ return a+b } 我正在尝试这个 val add = { a:Int,b:Int-> println("I am calculating the sale => no body you guy [$x+$y]"); //works } val add = { a:Int ,b :

我来自Javascript的背景,试图学习一些Kotlin

我知道我可以通过

fun add(a: Int , b: Int): Int{
   return a+b 
}
我正在尝试这个

val add  = {
        a:Int,b:Int->
        println("I am calculating the sale => no body you guy [$x+$y]");
  //works

  }


val add = { a:Int ,b : Int ->
   //How do i return from this function
}

这也是定义Kotlin函数的正确方法吗?第一种方法有什么不同呢?

希望这能奏效

val onChange  = {
        a:Int,b:Int->
        println("I am calculating the sale => no body you guy [$x+$y]");
  //works

  }


val add = { a:Int ,b : Int ->
    println("Sunm ${a+b}")
   //How do i return from this function
}


Log.v("Response", add(4,3))
输出
V/Response:Sum 7

您不需要在那里显式返回


您不能像这样在kotlin中返回值,因为您没有声明任何返回类型,这将导致类型不匹配的错误:

fun add(a: Int , b: Int){
   return a+b 
} //wrong
我们在kotlin中将返回类型声明为:

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

val add = { a:Int ,b : Int ->
}
这不是一个函数,它是一个赋值声明 在kotlin中,我们通过在函数名之前添加fun来声明函数 //默认情况下,您可以在其公用之前添加访问修饰符private、public和protected(如果需要)

fun add (){ //if it returns any value then add ": {datatype}" just right of "()" 
//your code here
}
希望它能帮助你:

这也是定义Kotlin函数的正确方法吗?第一种方式有什么不同

这甚至不是定义Kotlin函数的方法

在JavaScript中,所有函数都是具体化的:它们是可以从变量引用和传递的一流值。在Kotlin,不像其他许多语言,如java、C++、Objo C等。p> 函数只是一个声明,您可以调用它,但不能直接引用它。单独的语言功能允许您创建委托给这些函数的函数对象,并且您可以传递这些对象

所以,

fun add(a: Int , b: Int): Int {
    return a + b 
}
是一个函数声明和

val add = {a: Int, b: Int -> 
    a + b 
}
有四件事:

变量add的声明 函数类型Int,Int->Int的匿名实现声明 此匿名类型的实例化,生成函数对象 将对象赋值给变量add。 该对象有一个方法invokea:Int,b:Int:Int,您在块中给出了该方法的实现:

fun invoke(a: Int, b: Int): Int {
    return a + b
}
您可以显式地将其称为:

val result = add.invoke(a, b)

除此之外,Kotlin还定义了语法sugar,允许您省略显式的.invoke。

在JS中,使用function关键字定义的函数被提升,而使用var定义的其他函数则没有被提升。这是Kotlin..我知道JSMy中会发生什么问题..这些函数如何在内部延迟,以及如何从上一个函数返回var add={a:Int,b:Int->Sum${a+b}}}Log.vResponse,add4,3显式放置return实际上是一个语法错误,如果我想要一个带有return的多行体函数,那么与第一种方法有什么性能差异吗?这就像JS中的箭头函数一样。a&b参数或变量是在函数中声明的吗?它们实际上是函数的参数关于你的第一点..这是我在编辑中修正的一个错误..第二点我知道我在赋值..实际将函数赋值给变量。所以它是一个function@henrybbosa第一点我没有看到编辑,第二点在这种情况下你不需要返回,简单使用a+b。
val result = add.invoke(a, b)