Kotlin 这些定义函数的方法有什么区别?
我来自Javascript的背景,试图学习一些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 :
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)