从 C 开始,使用的是强类型风格,声明变量时,使用类型修饰符。对于不同的数据类型,需要使用不同的修饰符。
以 Java 为例
char c = 'c';
int num = 10;
boolean ok = true;
而然,也存在另一种风格,那就是不管变量是什么类型,统一使用一个关键字进行声明,比如 var
1(variable 缩写):
// 要是不做说明,或许还以为这是 JS 呢,实则为 Java
var s = "str";
var num = 10;
var ok = false;
这样的好处就在于,变量的类型由编译器自己推断,多数情况下,这比开发者自己显示标注的还要更精准。
C 并不提供此类玩法;在 C++ 中则存在类似的
auto
2。
在长期发展当中,一些强类型语言也支持了这种方式,但使用并不多,因为存在一个问题:语言编程风格。特别是那种存在类型声明方式的语言,就容易混着写,让自己的代码风格比较混乱。
多数情况下,只有那种复杂且长的类型声明,开发者才会默认选择使用
var
来简化声明。
其次是说,一种习惯吧,显式类型声明的变量,能够让人更加有安全感些,并且看到变量声明的区域,便知道该变量是什么类型。
并且,从学习语言开始,都会使用强类型声明方式(我不太相信哪个 Java 教程会让人从一开始,就使用 var
声明变量),从而习惯了这种传统方式。
当然,可以说的是,后一种统一风格写法是多数开发者都愿意接受的写法(最起码我是如此),毕竟记住一个声明关键字,比记住一堆类型关键字要简单。
于是出现了一种方案:共存。
声明变量使用一种关键字,而同时,提供类型注解的方式,选择性书写变量类型,也可以让编辑器执行自动推断。当前已知这种风格的语言有:TypeScript、Rust,Python
Python 在此处只演示类型注解
const str = "str";
const num: number = 10;
let str = "str";
let num: i32 = 10;
s: str = "abc"
num: int = 10
ok: bool = False
类型注解也表明了,强类型是一种很香的特性,这点从 TypeScript 上也能得到该结论,以至于出现了新提案,要在 JavaScript 当中添加类型注解功能。
-END-