当前版本中的常量声明方式是let,变量声明方式是let mut。实际中,变量的使用频率远超常量,这导致代码写起来很不方便,而且看着很冗余。推荐常量变量用不同关键字(比如像ES6的语法,变量用let,常量用const),或者对现在的声明方式做些修改(改为变量用let,常量用let immut)
目前 const
应该是给编译期常量了,不可变绑定应该不适合用这个
对于有函数式编程语言背景的人来说, 思考的是另一个事情. 不可变的数据, 就是不可变的, 在计算的时候表现出来就是一个值, 这个值什么时候计算, 引用了去计算, 拷贝了去计算, 都是一样的, 这个是最简单的值的概念. 而可变的数据会随时间变化, 包含更多的信息量, 每次使用的时候它是不是改过, 什么情况能改, 甚至会不会因为锁占用着而不支持修改, 包含更多需要考虑的信息. 从编写更高质量的代码角度考虑, 包含 mut 的情况才是应该要求程序员多加标记提醒和区分的.
1 个赞
有点道理。不过分配的这块内存原本的名字就叫变量,作为程序员,一旦使用了let去申请了这块内存就应该要注意了,而不应该通过mut再标记一下。并且实际情况变量用得要多得多,一眼看上去都是mut,也就起不到提醒区分的作用了,反而不如不标记。再考虑的moonbit刚出来不久,迎合其他语言程序员的编程习惯能更好地把他们吸引过来
moonbit使用这种设计的理由(我猜):
-
如果只是需要给中间结果起个名字用常量就好了。
-
有相当多使用变量的场景是循环结构,比如累加求和。但这可以通过将其改写成递归,从而把变量消除。如果不喜欢递归,还可以使用moonbit中等效的for、loop。这种写法很容易被编译器优化得不比 变量+循环 差。
-
变量能当常量用,但反过来不行。如果声明一个变量比常量更简单,偷懒的程序员就倾向于在 不需要使用变量的场景 使用变量,从而增加阅读负担(c语言就是这个例子)