我们知道C/C++/Java/C#等语言使用类型前置(严格说来C语言有时候还会把变量名夹到中间),Swift/Kotlin/Rust等使用类型后置。
那么类型名写在变量名后面还是前面好呢?
小孩子才做选择,成年人全都要。Fanx 3.0版本同时支持两种写法:
Int age = 12
var age: Int = 12
fun foo() : Str { .. }
Str foo() { ... }
fanx的成员声明关键字包括:var, let, const, fun, new。局部变量不需要关键字。
两种风格优缺点
之前回答过类似的问题。两种风格完全是品味问题,没有特别的优缺点。但有很多谣言,需要澄清。
类型前置和后置,不会影响编译器的运行效率。也没有解析难度,解析器超前看一个和喝凉水一样自然。都可以做类型推断,类型后置容易做类型推断就是谣言。
实现过程
因为变量名后置时有个冒号,所以两种风格能共存。编译器只需要超前超看一个token就能知道是那种方式了。如果超前下一个发现是冒号那么当前是变量名,下下一个是类型名。反之当前是类型名下一个是变量名。
本来想按照swift的设计使用func表示函数。但可惜func已经被大量用作标识符了,如果func改为关键字就需要改大量代码,所以使用了fun。
总共修改编译器花了一个多小时时间,改动真的比较小。很多新手看来是很大的区别,在编译器看来是家常。
示例代码
完整的一段示例代码:
class Person {
var age: Int
let name: Str
new make(n: Str) {
name = n
}
fun foo() : Str {
return name
}
static fun main() {
p : Person = Person("pick")
s := p.foo
echo(s)
}
}