Skip to content
This repository has been archived by the owner on Apr 13, 2023. It is now read-only.

Latest commit

 

History

History
200 lines (153 loc) · 4.79 KB

M6.1 Released.md

File metadata and controls

200 lines (153 loc) · 4.79 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]M6.1 Released
2013-10-02 17:00:00 -0700
Hadi Hariri
官方动态
false
Have a nice Kotlin!

两个月前,我们发布了 M6,现在我们已经准备好了另外一个更新,包含一大堆的好东西。

语言改进

有几种新的语言功能和增强功能。

改进的推论

现在,类型推断是智能投射。因此,以下内容将正常运行:

{% 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 %}

此外,当子句的返回值不相关时(即将其用作语句),else不再需要else*

{% raw %}

{% endraw %}
fun foo(x: Int) {
  when (x) {
     0 -> println("Zero")
     1 -> println("One")
  }
}

{% raw %}

{% endraw %}

抑制警告

您可以使用抑制注释来编辑任何声明或表达式(或按 Alt + Enter,让 IntelliJ IDEA 为您进行),以使编译器不再在其中发出警告。这可以用于未检查的转换,重命名的参数和任何其他警告。

{% raw %}

{% endraw %}
[suppress("UNCHECKED_CAST")]
fun  foo(x: Any): T {
    return x as T
}

{% raw %}

{% endraw %}

兰布纳当地的回报

为了避免混淆,裸机返回总是意味着“从命名函数返回”。这意味着在一个 lambda 表达式中,你不允许说“return x”表示你的 lambda 返回 x。为了减轻这种情况,您现在可以在 lambdas 中使用标签返回。说我们有一个名为 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 定义中的显式返回类型是一个临时要求,在将来不再需要*

警告:元数据格式已更改

我们对 JVM 上的二进制格式进行了重大改变,包括减小大小占用空间,提高速度和反思的准备。用旧 Kotlin 版本编译的二进制文件将不兼容。

JavaScript 支持

尽管有一个 成功的商业 产品使用 Kotlin,并被编译成 JavaScript,我们主要将精力集中在 JVM 上。直到最近。我们现在正在全力推动 JavaScript 支持,并且在此版本中,我们将添加到所提供的功能列表中,其中包括:

  • 支持枚举
  • 类对象
  • 委托属性
  • 多声明
  • SourceMaps

我们也不赞成对此版本的 ECMAScript 3 的支持。 定位 JavaScript 应用程序需要更多细节,这将是我们即将推出的一切。

IDE 增强功能

当涉及到 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 中的插件直接更新。