在Scala中,变量声明为:
var stockPrice: Double = 100.
Run Code Online (Sandbox Code Playgroud)
其中类型(Double)遵循标识符(stockPrice).传统上,在诸如C,Java,C#等命令式语言中,类型名称在标识符之前.
double stock_price = 100.0;
Run Code Online (Sandbox Code Playgroud)
这纯粹是一种品味问题,或者最终是否有类型名称以任何方式帮助编译器?Go也有相同的风格.
Mar*_*sky 65
凯文说得对.主要观察是"类型名称"语法效果很好,只要类型是短关键字,如int或float:
int x = 1
float d = 0.0
Run Code Online (Sandbox Code Playgroud)
以1的价格获得两条信息:"新定义从这里开始","这里是定义的(结果)类型".但是我们现在已经超越了简单原始类型的领域.如果你写
HashMap<Shape, Pair<String, String>> shapeInfo = makeInfo()
Run Code Online (Sandbox Code Playgroud)
您定义的最重要的部分(名称)隐藏在类型表达式后面.与之比较
val shapeInfo: HashMap[Shape, (String, String)] = makeInfo()
Run Code Online (Sandbox Code Playgroud)
它清楚地说
Kev*_*ght 51
除了支持类型推断,这也有一个符合人体工程学的好处.
对于任何给定的变量名+类型,可能是名称是更重要的信息.向左移动使其更加突出,一旦您习惯了这种风格,代码就更具可读性.
其他人体工程学优点:
val,var或def前成员名称,而不是它们的类型,它们都整齐地列排队.*在以下名称上作为前缀而不是C/C++中前一类型的后缀,或者[]是Java中名称和类型的有效后缀)仍然令人困惑对新手或语言转换,并在单行上声明多个变量时会导致一些非常真实的错误.斯卡拉在这里没有任何怀疑和困惑的余地.Dan*_*ral 15
之后它可以被移除以进行类型推断:
var stockPrice: Double = 100.0
var stockPrice = 100.0
Run Code Online (Sandbox Code Playgroud)
然而,命令式语言传统上首先具有类型并不是事实.例如,Pascal没有.
现在,C做到了,而C++,Java和C#都是基于C的语法,所以他们自然也是这样做的,但这绝对与命令式语言无关.
应该注意的是,即使C"传统上"也没有在变量名之前定义类型,但实际上允许声明是交错的.
int foo[];
Run Code Online (Sandbox Code Playgroud)
在词法之前和之后声明foo类型的地方.
除此之外,我猜这是一个没有区别的区别.编译器开发人员肯定不会这样或那样.