Skip to content

Latest commit

 

History

History
210 lines (164 loc) · 4.43 KB

More changes Enum Syntax, Another Deprecation and More.md

File metadata and controls

210 lines (164 loc) · 4.43 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url
[译]More changes: Enum Syntax, Another Deprecation and More
2015-04-07 06:34:00 -0700
Andrey Breslav
官方动态
false
Have a nice Kotlin!

{% raw %}

{% endraw %}

枚举语法

目前,与非平凡构造函数的枚举的语法有点怪异:

{% raw %}

{% endraw %}
enum class Message(val str: String) {
    ERROR : Message("This is an error")
    WARNING : Message("This is a friendly warning")
    DEBUG : Message("Ignore this")
}
 

{% raw %}

{% endraw %}

{% raw %}

{% endraw %}

我们真的希望使它更好,例如这样的:

{% raw %}

{% endraw %}
enum class Message(val str: String) {
    ERROR("This is an error")
    WARNING("This is a friendly warning")
    DEBUG("Ignore this")
}
 

{% raw %}

{% endraw %}

现在有一些技术性,即枚举可以有其他成员:

{% raw %}

{% endraw %}
enum class Example(...) {
    A(...)
    B(...)
 
    fun foo() { ... }
}
 

{% raw %}

{% endraw %}

问题是可以将 A </ code>和 B </ code>解析为 foo()</ code>上的注释。所以我们在这里有一些选择。 我们倾向于在条目和其他成员之间放置一个分隔符:

{% raw %}

{% endraw %}
enum class Example(...) {
    A(...)
    B(...)
    ; // this is mandatory
 
    fun foo() { ... }
}
 

{% raw %}

{% endraw %}

只有当一些成员遵循分号时才需要分号。 其他选项包括要求对成员的所有注释进行转义(也可能是修饰符):

{% raw %}

{% endraw %}
enum class Example(...) {
    A(...)
    B(...)
 
    @inject fun foo() { ... }
}
 

{% raw %}

{% endraw %}

这与普通课程,特质等有些不一致 或者我们可以使用(soft-)关键字对enum条目进行前缀:

{% raw %}

{% endraw %}
enum class Example {
    entry A
    entry B
}
 

{% raw %}

{% endraw %}

这看起来太冗长了 另一个问题是我们如何自己注释枚举条目。需要逃脱看起来合理:

{% raw %}

{% endraw %}
enum class Example {
    @Ann1 A
    @Ann2(...) B    
}
 

{% raw %}

{% endraw %}

其他选项包括

  • 需要枚举文字之间的逗号(像Java一样)
  • 需要在枚举文字之间设置换行符并允许在同一行上使用未转义的注释

我们还没有决定哪一种方式。

{% raw %}

{% endraw %}

禁止在表达式中断/继续

当</ code> -expressions作为</ code> -entry跳转到下一个时,我们计划在中实现 continue </ code>。它还没有实现,但是当我们添加代码时,我们希望您的代码保持不变,因此暂时在中禁止在中使用继续</ code>,而不使用指向的标签循环:

{% raw %}

{% endraw %}
loop@
for (...) {
    when (...) {
        ... -> if (...) continue@loop else ... // OK
        ... -> if (...) continue // ERROR
    }
}
 

{% raw %}

{% endraw %}

我们还禁止中的 break </ code> </ code>。虽然还没有决定是否要允许它,但似乎更好的设计是保持 break </ code>和 continue </ code>对称。 注意:当</ code>在“停止匹配并跳出外部”(如Java和C中的 switch </ code>)中时, break </ code>的简单解释,但是当</ code>经常返回一个值时,如果我们突破它,这将是未知的。

{% raw %}

{% endraw %}

将特征重命名为接口

那么我们很久以前就选择了这些名字,现在我们在Kotlin中所说的“特质”并不是一个特质,就像现在的Java接口一样,所以我们不想使用 trait < / code>关键字,并在M12中引入 interface </ code>。 反馈请求:让火焰开始<img alt =“:)”class =“wp-smiley”data-recalc-dims =“1”src =“https://i2.wp.com/blog.jetbrains.com/ kotlin / wp-includes / images / smilies / simple-smile.png?w = 640&amp; ssl = 1“style =”height:1em; max-height:1em“