美文网首页
变量的可变性

变量的可变性

作者: 筑梦之队 | 来源:发表于2021-02-19 12:16 被阅读0次

    在所有的编程语言中,变量都是一个必备的概念;否则,计算机也就失去了意义。但是对于变量的值是否可以修改,却存在着不同的设计理念。我见过的有如下三种类型:
    一、变量随时可变
    变量,顾名思义,就是可以改变的量。在大多数的语言中,我们可以随时给一个变量赋值,从而改变其内容。如C, C++, C#, Java, Go等。
    这种方式的好处显而易见,即可以很容易地操作变量,从而实现功能需求。
    但这种灵活性也带来了一些隐患,即变量可能被无意中修改而不自知,从而引入了bug。

    int x = 5;
    x = 6;
    

    二、变量不可变
    为了解决前述的问题,有些语言,如Erlang规定变量一旦被赋值,则不能改变。如果想要改变,就需要一个定义一个新的变量。
    这种方式的好处是,不会在无意中修改变量的值。
    但是它带来的问题却更大:
    1、由于变量不可以修改,当我们需要修改数据时,需要先拷贝原始数据到新的内存地址,尤其是当拷贝的为大对象时,性能损失极大;
    2、由于变量不可以修改,每次要修改时,我们需要给变量一个新的名称,这对于命名是一个极大的挑战。本来需要一个有意义的名称已经很不容易了,现在却需要找多个名称;于是在代码里面出现了大量的Name1, Name2, Name3这样的变量名称,非常的丑陋。
    错误的写法:

    X = 5,
    X = 6. // exception error: no match of right hand side value 6
    

    正确的写法:

    X = 5,
    X1 = X + 1,
    

    三、变量默认不可变,但可以按需改变
    为了解决前述问题,新锐语言,如Rust采取了一套新的方式。
    1、变量默认是不可以被修改的;
    2、但如果确实需要被修改,则在定义变量时,在变量名前面加上mut关键字;
    3、同一个变量名可以重复使用。这样可以在修改变量后,再将其变为不可变。
    错误的写法:

    let x = 5;
    x = x + 1; // cannot assign twice to immutable variable
    

    正确的写法:

    let mut x = 5;
    x = x + 1;
    

    高级的写法:

    let mut x = 5;
    x = x + 1;
    let x = x; // 之后x将不可以被修改
    

    Rust的这种方式,可以很方便地帮助程序员控制变量的可变性,并减少隐秘bug的引入。

    相关文章

      网友评论

          本文标题:变量的可变性

          本文链接:https://www.haomeiwen.com/subject/lvqaxltx.html