更新变量有什么问题?
其他人通过有效地说“因为Kotlin函数参数是不可变的”来回答问题。当然,这是一个正确的答案。
但鉴于如此多的语言,包括Java,让您重新分配函数的参数,因为它可能是有效的解释你的问题:“为什么科特林不允许重新分配功能的参数?”
我的回答:科特林和斯威夫特有许多共同的特点,让我去斯威夫特3明白为什么他们决定弃用功能参数重新分配,发现这motivation。
在函数参数上使用var注释具有有限的实用性,以代价为一行代码进行优化,其代价是与inout混淆,代价是大多数人希望的语义。为了强调这些值是唯一副本,并且没有inout的回写语义,我们不应该在这里允许var。
总之,这促使这一变化的问题是:
•VAR通常与函数参数INOUT困惑。
•var经常被混淆,以使值类型具有引用语义。
•函数参数不是if-,while-,guard-,for-in和case语句中的可逆模式。
当然,Kotlin没有inout
装饰。但作家可以选择允许val
和var
,其中val
是默认设置。然后他们会有许多其他语言的行为。相反,他们选择了代码清晰度。
OP示例代码显示了参数重新分配何时清晰自然的有效示例。不得不再添加一行到一个非常短的函数(以获得一个局部变量来完成参数变量可能完成的工作),恕我直言,降低了清晰度。再次,恕我直言,我会更愿意可以声明我的参数为var
。
来源
2017-07-24 13:44:43
Les
是的,你可以认为它在Java中是** effective-final **。 –