- Flutter从0基础到App上线
- 萧文翰
- 725字
- 2021-03-27 01:49:32
3.2 变量与常量
在程序中,经常用大量的数据来代表程序的状态,其中有些数据的值在程序运行过程中会发生改变,有些数据的值不能发生改变,这些数据在程序中分别叫作变量和常量。
3.2.1 变量
所谓变量,就是用来储存值的对象,它可能是一个整数,也可能是一段话,其值通过变量名来访问。在Dart编程语言中,声明一个变量的方法非常简单。比如,要保存一个值为David的名字,操作如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_7.jpg?sign=1739439725-3AVO5Nk1EIDtT5ksftQ7Ite1coBacg8t-0-ffa457f4602504cb527873c61a27e04a)
在读取它时,仅仅按照name这个变量名去获取值即可。
现在,使用Dart内置的Print()方法向控制台输出名为name的变量值,代码片段如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_8.jpg?sign=1739439725-wEewe1WPowCp8It3zmp1JQptkNK3ojOr-0-a6216475e0452c7b5534b8ba06e7d6c5)
运行结果如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_9.jpg?sign=1739439725-oXOsiJUJ8Vv6jWkIlHnM79NDBGKtoo2t-0-254ee692fcac09631ea37eee9dba1196)
在这个例子中,name储存了一个字符串数据对象的引用,值为David。当然,也可以直接使用String(字符串)类型或dynamic(动态)类型,而不是用var来对name进行声明。具体做法如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_10.jpg?sign=1739439725-9v1iToKheZHcL86bifwsxsTY3hQwtNg4-0-8c7045afbdb597f251e009e6309fd8c9)
或者:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_11.jpg?sign=1739439725-W7nOYDU9rhrUTgRmkIrF9cyiL2c5Dl4a-0-b5009d2c2ce31c114662bf60e631b5ec)
对于局部变量(指仅拥有局部作用域的变量,如一个方法内部)而言,根据代码建议的风格,建议使用var来声明变量。
在前文中提到,在Dart中一切皆对象。因此,未经初始化的变量的默认值为null。使用如下代码测试:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_12.jpg?sign=1739439725-UnCSuM3y1H1yn1xI8PDfQBCMycsLbmdu-0-d966836286bbc6644d8f55a82a8a016d)
运行结果如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_13.jpg?sign=1739439725-ocXl7a8pRGCHdDt1StsxfeeraYjuMFi2-0-4738c2128173b14f6ce004fb5065de1a)
3.2.2 常量
常量,也称为最终变量。简单地说,一旦一个对象成了常量,其引用的对象就不再可变。在Dart语言中,可使用final或const关键字来声明一个常量。如下所示:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_14.jpg?sign=1739439725-mep7I95ooLWXKICBLS5ryZbh6kImQXJv-0-81fe44af24431a7cd20eb3de788c0774)
或者
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_15.jpg?sign=1739439725-dCSGDCQOxdvABopM3C4U8Kx3FUx0tiBe-0-8424ae3480279dd120b6a7d1a413f605)
或许有人会产生疑问:final和const都可用来声明一个常量,有什么区别呢?const声明的常量是一种编译时常量,如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_16.jpg?sign=1739439725-RxOREt31HzwWZcKAc2IYghSfkIwGxExv-0-5ebe7db53713475799cc1194b87bbc51)
从上面代码中可以发现,IDE会自动检查出在buyTwo值中的错误,因为const是一种编译时常量(即在运行前),所以同样需要用const来声明singlePrice。
const关键字也可以用来创建不变的值,甚至定义构造函数为const类型,即不可变对象,且任意变量都可以有一个不变的值。代码片段如下:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_17.jpg?sign=1739439725-BTsX3mkkWxj8lTqcTss52wZezHpqgQw1-0-9393d0f8ff2fa8a415f456b0d0863d29)
创建的intList变量的值为一个常量值(中括号表示一个数组)。虽然intList的值为常量不可变,但由于其本身声明使用了var,因此它仍然可以改变其引用。上述代码相当于:
![img](https://epubservercos.yuewen.com/9CF474/18096059801207706/epubprivate/OEBPS/Images/txt003_18.jpg?sign=1739439725-OePD9TLzbr8KyWb5crRQOKNayDTuiiZR-0-8160cfdc1884963a65c46ad74dd41e25)