变量声明和变量赋值是否应当分开

沙枣 发布于 2016/09/23 23:06
阅读 370
收藏 0

在 Perl 语言中,变量声明和变量赋值是用不同的关键字来标记的:

my $var = 1
$var = 2

Lisp 语系也是一样:

(let ($var 1)
    (set $var 2))

支持这种区别的语言还有 Lua,C,Go.

但在别的语言,例如 Ruby, Julia, Python 中变量声明和变量赋值是一起的:
var = 1
var = 2

因为代码在编写过程中,程序员会经常写错变量,导致使用未定义的变量,就会导致不可预料的错误。

如果赋值和声明分开,如果在赋值的时候,写错一个变量的名称,那么这个错误就不会被编译器捕捉到。

但在变量赋值语句中写错变量的可能性,比起在引用变量的所有场景中写错变量的可能性要低很多,所以用赋值代替声明这种做法,不会引入许多因为变量名称拼写错误导致的问题。

但这种写法会导致每次赋值的时候,编译器会查找所有可用的命名空间,以确定变量是新定义还是赋值。所以这种合在一起的语法,比分开的语法效率更低。尤其在函数中,变量赋值的代价是很高的。(所以,Python 用 global 来特别声明全局变量来避免这种无谓的查找)。

虽然赋值和声明用一种语法会简化编程,降低程序员的负担,但会降低代码效率。用这种语言写代码,首先要搞明白全局变量和全局函数到底有哪些,省的命名冲突。

不知道大家感觉哪种风格好、

加载中
0
月影南溪
月影南溪

C语系的推荐变量哪里用哪里声明、哪里赋值。因为相对于变量名成问题,不可预知的变量初始值才是麻烦。因为C/C++如果变量没有赋初始值的话,系统默认分配一个初始值,而这个初始值是先指向一个地址,然后从地址拿出一个值。这种时候就会出现,初始值不可预测的问题。基于这个问题,C语系的其他语言修改为默认赋0/NULL。

所以其实声明跟初始化最好还是不要离得太远,一方面会导致变量的应用范围过大,一方面就是变量的值不好预测。

月影南溪
月影南溪
还有就是尽量少的全局变量,因为过多的全局变量对于其他程序员来说并不友好。
返回顶部
顶部