在Kotlin中,我了解可以将字符串直接分配给函数,例如:
fun foo(): String = "Hello World"
但是您也可以直接将String分配给变量:
var foobar: String = "Hello Word"
我的问题是,为什么只创建变量就创建函数?我看不到该功能的存在。
答案 0 :(得分:2)
关于
的有趣的事情fun foo(): String = "Hello World"
是它正在使用表达式语法,并且等效于:
fun foo(): String {
return "Hello World"
}
虽然仅使用表达式语法返回常量不是很有用,但在整个函数可以用以下方式表示的情况下,避免使用{block}
和return
语句可以使函数定义更加简洁一种表达方式。
例如,如果foo()
是类的方法,则可以使用该类的属性打个招呼:
class Hello(var what : String = "World") {
fun foo(): String = "Hello, $what!"
}
fun main() {
val hello = Hello()
println(hello.foo())
hello.what = "Universe"
println(hello.foo())
}
此打印:
Hello, World!
Hello, Universe!
答案 1 :(得分:0)
这是有关何时首选函数而不是属性的更多信息。
Kotlin coding conventions的一节对此进行了描述。
当-
就API用例而言,在某些情况下,公开一个函数而不是一个属性可能是一个好主意,因为这为您提供了将来更改此API实现的范围。今天可能是硬编码的值,将来可能会由计算该值的代码代替。
答案 2 :(得分:0)
很简单,考虑一下单词编码的含义。编码规则。复杂的规则被分解为抽象级别以下一级的规则,因此该程序尽可能易于理解。
好吧,函数名仅比表达式高一级。在象kotlin这样的富有表现力的语言中,这一点更为真实,其中一行可以轻松地等同于Java的几行。
如果仅是在谈论字符串或基元,那么,是一种比函数更自然的选择。