title | date | author | tags | keywords | categories | reward | reward_title | reward_wechat | reward_alipay | source_url |
---|---|---|---|---|---|---|---|---|---|---|
[译]M6.1 Released |
2013-10-02 17:00:00 -0700 |
Hadi Hariri |
官方动态 |
false |
Have a nice Kotlin! |
两个月前,我们发布了M6,现在我们已经准备好了另外一个更新,包含一大堆的好东西。 </ span>
有几种新的语言功能和增强功能。
现在,类型推断是智能投射。因此,以下内容将正常运行:
{% raw %}
{% endraw %}val map: Map<String, String> = ...
if (str != null) {
map[str] = "Something"
}
{% raw %}
{% endraw %}编译器现在更聪明,捕捉不可能的演员
{% raw %}
{% endraw %}val name: String = "Joe"
if (name is Iterable<*>) {
...
}
{% raw %}
{% endraw %}会给出编译错误。 相同的方式,现在可以推导出裸体类型的投射
{% raw %}
{% endraw %}val values: Collection<String> = ...
if (values is List) {
val name: String = values[0]
}
{% raw %}
{% endraw %}此外,当</ em>子句的返回值不相关时(即将其用作语句), else </ em>不再需要 else </ em>
{% raw %}
{% endraw %}fun foo(x: Int) {
when (x) {
0 -> println("Zero")
1 -> println("One")
}
}
{% raw %}
{% endraw %}您可以使用抑制</ em>注释来编辑任何声明或表达式(或按Alt + Enter,让IntelliJ IDEA为您进行),以使编译器不再在其中发出警告。这可以用于未检查的转换,重命名的参数和任何其他警告。
{% raw %}
{% endraw %}[suppress("UNCHECKED_CAST")]
fun foo(x: Any): T {
return x as T
}
{% raw %}
{% endraw %}为了避免混淆,裸机</ em>返回</ em>总是意味着“从命名函数返回”。这意味着在一个lambda表达式中,你不允许说“return x”表示你的lambda返回x。为了减轻这种情况,您现在可以在lambdas中使用标签返回</ em>。说我们有一个名为foo的更高阶的函数
{% raw %}
{% endraw %}fun foo(func: () -> Int) { ... }
{% raw %}
{% endraw %}我们可以称之为传递一个检测条件并早期返回的lambda
{% raw %}
{% endraw %}foo @myLambda { (): Int ->
if (...)
return@myLambda 10
...
}
{% raw %}
{% endraw %}定义上的明确标注不是必需的,所以以前的标签将等价于:
{% raw %}
{% endraw %}foo { () : Int ->
return@foo 10
}
{% raw %}
{% endraw %}{% raw %}
{% endraw %}
Lambdas会在传递给它们的功能后自动标记。 注意:lambda定义中的显式返回类型是一个临时要求,在将来不再需要</ em>
我们对JVM上的二进制格式进行了重大改变,包括减小大小占用空间,提高速度和反思的准备。用旧Kotlin版本编译的二进制文件将不兼容。
尽管有一个 成功的商业 产品使用Kotlin,并被编译成JavaScript,我们主要将精力集中在JVM上。直到最近。我们现在正在全力推动JavaScript支持,并且在此版本中,我们将添加到所提供的功能列表中,其中包括:
- 支持枚举
- 类对象
- 委托属性
- 多声明
- SourceMaps
我们也不赞成对此版本的ECMAScript 3的支持。 定位JavaScript应用程序需要更多细节,这将是我们即将推出的一切。
当涉及到IntelliJ IDEA支持时,我们在这个版本中有更多的功能。
- 将成员函数转换为扩展功能
- 导航到一个委托属性的getter和setter(Ctlr +点击)
- 导航到迭代器/ next / hasNext在for循环(Ctlr +点击)
- 从呼叫站点导航到invoke()(Ctlr +单击括号)
- 查找用途的改进,包括对构造函数和覆盖的支持
我们还改进了项目配置,包括基于Maven和Gradle的项目,包括UI改进,以及一些调整完成。 最后但并非最不重要的是,此版本还为最新的EAP提供了支持 IntelliJ IDEA 13 以及最新的Android Studio。 我们可以找到编译器和插件 GitHub上的发行页面 。如果您使用IntelliJ IDEA,您可以从中下载最新的插件 我们的存储库 或者通过IntelliJ IDEA中的插件直接更新。