创建包含字符串的单行函数有什么好处,而仅通过将字符串分配给变量是无法实现的?

时间:2019-06-05 22:02:47

标签: kotlin

在Kotlin中,我了解可以将字符串直接分配给函数,例如:

fun foo(): String = "Hello World"

但是您也可以直接将String分配给变量:

var foobar: String = "Hello Word"

我的问题是,为什么只创建变量就创建函数?我看不到该功能的存在。

3 个答案:

答案 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的几行。

如果仅是在谈论字符串或基元,那么,是一种比函数更自然的选择。