11
回答
Kotlin 初探
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   
最近我一直在研究 Kotlin。Kotlin 是一种新的静态 JVM 语言,大约于2011年底发布。这个月 JetBrains 发布了这个语言的第一个里程碑候选版本,我决定仔细研究一下。

首先,Kotlin 还在非常早期的阶段。虽然有很多功能看起来很酷,特别是 IDE 的支持,但是还有很多潜在的问题。我已经遇到几个 bug 了。

我在这里简单解释几个 Kotlin 的特性。

Null-safety
fun demoVars() {
        val first : String = "abc"
        first = "xyz" // error, variable is immutable
        var second = "abc"
        second = null // error, variable is mutable but non-nullable
        var third : String? = "abc"
        third = null  // ok, variable is marked as nullable ('?')

        foo?.bar?.baz // safe navigation
    }
译者注:Kotlin 可以指定一个对象是否可以为 null,省去了烦人的  NullPointerException,并且提供了“foo?.bar?.baz”这样的调用方式,省去了判断对象是否为 null 的代码。

Multi-line strings and string templates (多行 String 和 字符串模板)
fun demoMultiLineTemplate() {
        val first = "john"
        val second = "doe"
        println("""
          First name: $first
          Second name: $second
        """)
    }
译者注:Kotlin 支持字符串的分行,并且支持直接在字符串中引用变量,而不用像 Java 那样添加很多的加号来链接字符串。   

Higher-order functions
bar({ println("I'm foobar") })
    bar({ println("I'm foobar") }, { println("I'm foobaz") })

    fun  bar(foobar : () -> T) {
        foobar()
    }

    fun  bar(foobar : () -> T, foobaz : () -> B) {
        foobar()
        foobaz()
    }

译者注:没看懂,谁来解释一下?

 

原文链接,OSChina.NET 编译

 

 

举报
虫虫
发帖于6年前 11回/5K+阅
共有11个评论 最后回答: 8个月前
val first : String =  "abc"
--- 共有 4 条评论 ---
aiasfina回复 @freish : 这条语句可以用推导缩减为 val first = "abc" ,有后面的字符串推导出变量的类型。传统的 String s 是不可以的,除非增加一个var 或 val关键字。至于你说得什么设计的我不大懂你意思。这语法很大程度是习惯受限而已。 6年前 回复
freish回复 @花前阅夏 : 不能拿行不通作为借口,也不能以技术能不能,好不好实现为导向。而该先设计,再实现。从使用,设计层面来看,此语法确实够蛋疼了 6年前 回复
aiasfina回复 @freish : 这不是蛋疼,基于流式类型推导,前置类型描述肯定行不通的。所以Java7才除了个真正蛋疼的<>语法 6年前 回复
freish谁想出这种蛋疼、复杂的语法的 6年前 回复
最后一个例子, () -> T 相当于 Scala的 () => T 【有点小差别】,这是一个以Unit为参数,T为返回值的匿名函数的 类型 ,然后函数bar重载。大概是这样...
跟scala差不多,只是Scala不支持 字符串中引用变量, 没有foo?.bar?.baz这种用法. 至于non-nullable, Scala鼓励使用Option
顶部