You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Kotlin中函数参数不允许使用var或val关键字?

Kotlin 函数参数禁止添加 var/val 关键字的原因

首先明确你给出的示例的合法性:

  • 合法写法:fun myfunction(a:String)
  • 非法写法:fun myfunction(var a:String)、fun myfunction(val a:String)

这个语法限制是Kotlin设计之初就确定的规则,核心原因有三个:

  1. val声明属于完全冗余的无效语法
    Kotlin的普通函数参数默认就是只读的,本质上和val修饰的变量属性完全一致,你在函数内部默认就不能修改参数的值,比如下面的代码本身就会编译报错:
fun calculate(score: Int) {
    score = 100 // 编译失败,函数参数默认只读不可修改
}

所以额外给参数加val没有任何实际作用,属于完全冗余的写法,Kotlin从语法层面直接禁止了这种无意义的冗余声明。

  1. 避免和主构造函数的属性声明逻辑混淆
    Kotlin的主构造函数有个特殊语法:给主构造参数加var/val会直接将该参数声明为类的成员属性。如果普通函数也允许给参数加var/val,很容易让开发者产生误解,误以为普通函数参数加这两个关键字也会有特殊作用,大幅提升语法的理解成本和出错概率。

  2. 避免可变参数的语义歧义
    如果允许给普通函数参数加var,很容易误导开发者以为参数是“可写回外部”的引用,但Kotlin所有参数都是值传递:就算你在函数内部修改了参数变量的值,修改的也只是函数栈帧上的临时变量,完全不会影响外部传入的实参。如果真的需要在函数内部修改参数对应的数值,直接在函数内部声明一个局部变量赋值即可:var localScore = score,写法清晰没有歧义,完全不需要通过给参数加var实现。

内容的提问来源于stack exchange,提问作者newbie_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:42:03