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

Latest commit

 

History

History
218 lines (158 loc) · 8.22 KB

M7 Release Available.md

File metadata and controls

218 lines (158 loc) · 8.22 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]M7 Release Available
2014-03-19 17:00:00 -0700
Hadi Hariri
官方动态
false
Have a nice Kotlin!

Kotlin M7 在这里和它一些期待已久的功能。

编译器和语言变化

内联支持

M7 的最大特点之一是支持内联功能。 Kotlin 鼓励使用高阶函数(有些人称之为“功能性样式”),这需要大量使用 lambda 表达式。从 M7 开始,您可以将更高阶的函数声明为“内联”,这意味着它的正文将在调用站点以及传递给它的任何 lambdas 内联。这意味着使用这些功能的性能损失是无关紧要的。例如,使用**循环而不是使用forEach并传递一个 lambda 在速度方面几乎没有区别。
内联提供的优点包括生成的类的数量,字节码大小,更少的分配和更少的变形调用,所有这些都有助于这些性能提升。 Kotlin 标准库的许多功能现在已经被列入了。 注意:如果内联中断代码(例如由于编译器错误),可以通过将 -inline off 命令行选项传递给编译器来关闭它(请参阅首选项 - >编译器 - > Kotlin 编译器):

{% raw %}

inline

{% endraw %}

toString(),equals()和 hashCode()需要 override 指令

当声明toString()equals()hashCode()时,我们现在需要使用覆盖关键词。这是以前版本中的突破性变化,适用于所有类。使用 IDE 中提供的快速修复(Alt + Enter 错误)快速添加“覆盖”到项目中的所有这些方法。

“jet”包更名为“kotlin”

核心类已被重命名为“kotlin”,这也意味着,是的,你猜到了,Kotlin 现在是 Kotlin 的官方和最终名字。这也是一个潜在的破坏性变化。大多数进口将自动发生。如果遇到任何问题,请手动重命名导入。

参考本地功能

在 Kotlin 中,您可以使用*:: functionName*语法通过名称引用函数。这也适用于本地功能

{% raw %}

{% endraw %}
fun foo() {
 
    fun bar() {
 
    }
 
    fun biz(func: () -> Unit) {
 
    }
 
    biz(::bar)
}

{% raw %}

{% endraw %}

互操作性

*[throws]*注释

现在,您可以使用throws注释来装饰函数,以指示当编译为 JVM 时该函数应声明哪些异常。

{% raw %}

{% endraw %}
[throws(javaClass<SocketException>()]
fun connect(host: String) {
...
}

{% raw %}

{% endraw %}

将被翻译成

{% raw %}

{% endraw %}
void connect(String host) throws SocketException {
...
}

{% raw %}

{% endraw %}

在 Java 中。

JavaScript 增强功能

您现在可以提供重载函数并将其编译为 JavaScript。 Kotlin 使用后缀_1,_2 等创建新的函数。

{% raw %}

{% endraw %}
    foo: function () {
    },
    foo_1: function (param) {
    },
    foo_2: function (param, anotherParam) {
    }

{% raw %}

{% endraw %}

此外,JavaScript 本机功能还允许将扩展文字作为参数传递。

标准库

标准图书馆正在重新加工。这包括引入(除其他外,这将有助于更好地与 Java 8 的兼容性)和某些功能的弃用。 某些重新设计已导致库 API 破坏****。大多数功能仍然可用,但您可能需要稍微修复现有代码。

IntelliJ IDEA 增强功能

现在复制/粘贴插入导入

当从一个文件复制和粘贴代码到另一个文件时,IntelliJ IDEA 将自动导入所需的任何软件包。

查找用途改进

查找用途现在涵盖本地课程。此外,您现在可以看到覆盖以及这些的分层视图。

智能完成

增强代码完成功能,支持枚举,Java 静态成员以及匿名对象。

{% raw %}

smartcompletion1

{% endraw %}

重构支持

某些重命名重构(如局部变量)现在可以在现场完成,而无需使用对话框。

{% raw %}

In-Place Rename Refactoring

{% endraw %}

安全删除

您现在可以安全地删除整个项目中未使用的符号,并使用安全删除重构

重新包装

现在支持所有导入的软件包重命名和相应的更新

{% raw %}

Rename Package

{% endraw %}

与 Java 的移动重构集成

当执行 Java 代码的移动重构时,它现在更新 Kotlin 代码中的相应用法。

意图

此版本还为 IntelliJ IDEA 带来了一系列意向,其中包括:

替换 Elvis 操作符如果有条件

安全访问操作员或者 elvis 操作员现在可以用更明确的方式替换,如果需要,只需简单地使用意图即可。

{% raw %}

elvis3

{% endraw %}

Infix 呼叫点限制呼叫

Infix 呼叫可以转换为点限呼叫

{% raw %}

infix

{% endraw %}

转换为表达体

能够使用简单的 return 语句将函数转换为表达式

{% raw %}

convertbody

{% endraw %}

从字符串模板中的简单变量名称中添加和删除大括号

当我们在字符串模板中有变量名时,我们可以轻松添加或删除大括号

{% raw %}

stringtemplates

{% endraw %}

除了上述之外,还有

  • 支持 IntelliJ IDEA 13.1 和 Android Studio
  • 通过懒惰分析进行性能改进,导致与 Java 的更好的互操作速度。
  • 改进的 Java2Kotlin 转换器,导致更清晰的代码,并包括更好的复制/粘贴行为。
  • 代码格式化程序的改进

其他改进

另外还有一些其他错误修复和功能

  • 改进的控制流分析导致修复一些现有的错误。
  • 更多的 bootstrapping。我们在 Kotlin 使用越来越多的 Kotlin。
  • 对 Kotlin 标准库进行了一些改进。

我们可以找到编译器和插件 GitHub 上的发行页面
如果您使用 IntelliJ IDEA,您可以从中下载最新的插件 我们的存储库 或者通过 IntelliJ IDEA 中的插件直接更新。 Kotlin M7 需要 IntelliJ IDEA 13.1。