前言
变量与常量——编程世界的基石
在编程中,数据如同流动的河流,时而平静,时而激荡。为了驾驭这股力量,程序员们发明了两种基本工具:变量和常量。它们就像是编程语言中的螺丝钉和齿轮,看似简单却不可或缺,共同构建起了复杂而精妙的应用程序。
操千曲而后晓声,观千剑而后识器。虐它千百遍方能通晓其真意。
一、变量
1.1、定义
在计算机科学中,变量是用于存储数据的基本概念。可看作是一个存储数据的容器,其值可在程序运行中被改变。它具有一个名称(标识符)和一个数据类型(如整型、字符串型等),并且可根据需要多次赋值和修改。
详细说明:
- 1、标识符(
变量名):- 用于在程序中
引用该变量。 - 遵循标识符的
命名规则,具体可查看标识符章节。
- 用于在程序中
- 2、数据类型:
变量可存储的数据类型,如基本数据类型。静态类型语言,变量的数据类型必须在声明时指定。动态类型语言,变量的数据类型可以在运行时确定。Dart既是静态类型语言,也是动态类型语言。
- 3、变量的值:
- 存储在变量中的
实际数据。 - 变量的值可以被
读取和修改。
- 存储在变量中的
1.2、特点
- 1、命名规则:遵循语言
特定的命名规则。 - 2、可变性:变量的值可以在
程序运行期间被多次赋值和修改。 - 3、内存限制:不同的数据类型所占的
内存大小不同,注意数据类型的取值范围。 - 4、作用域:变量的
有效范围,决定了变量在程序中的可见性和生命周期。
1.3、深入理解
关于存储功能,在日常生活中,最容易联想到的便是储物柜了,可以把变量看作是一个储物柜。
- 1、每个储物柜都有编号(
变量名):就像储物柜有唯一的编号一样,每个变量也有一个唯一的名称(标识符),用于在程序中引用它。 - 2、储物柜可以存放不同类型的物品(
数据类型):储物柜可以用来存放各种类型的物品,如书籍、衣物或文具。同样,变量可以存储不同类型的数据,如整数、浮点数、字符串等。 - 3、储物柜里的物品可以随时更换(
可变性):你可以随时打开储物柜,取出旧物品并放入新物品。类似地,变量的值可以在程序运行期间被多次赋值和修改。 - 4、储物柜有大小限制(
内存限制):储物柜的大小有限,只能存放一定数量的物品。同样,变量在计算机内存中也占有一定的空间,不同的数据类型占用的内存大小不同。
1.4、声明及初始化
1.4.1、显示声明
类型名称 + 变量名。
1.4.2、var
- 用于
声明变量,属于隐式声明。 - 编译时
类型检查,编译器会自动推断其类型。 - 声明的变量
初始化后其类型不能改变。 - 适用场景:声明变量时能确定其类型。
1.4.3、dynamic(动态类型)
- 用于
声明变量,可以运行时存储任何类型的数据。 - 运行时
类型检查,编译时不检查类型。 - 适用场景:
声明变量时能不确定其类型且需要在运行时动态改变类型。
1.4.4、final(终量)
- 用于声明
不可变的变量。 - 初始化后其值
不可重新赋值。 - 可
延迟初始化,可运行时初始化。
1.4.5、const(编译时常量)
- 用于声明
编译时常量。 声明同时赋值,其类型确定不可修改。- 隐式声明时编译器可推断其类型。
1.4.6、late(延迟初始化)
- 用于声明
非空变量,延迟初始化。 - 远行时检查,
可绕过编译时检查,若在未初始化前访问,会抛出一个LateError异常。
void main() {
// 1、显示声明
int a = 10;
// 2、var声明 隐式声明 编译时检查,类型确定后不可变
var name = "John";
name = 10; // 错误,不能将int类型的值赋值给String类型的变量
// 3、dynamic声明 运行时检查 可存储任何类型的值
dynamic b = 5;
b = "hello"; //正确,可以在运行时存储任何类型的值
// 4、final声明 初始化后不可重新赋值,可先声明后初始化
final c;
c = 15;
c = 'Hello';//错误, 需确保变量只能设置一次值
// 5、const声明 声明同时赋值,其类型不可修改和重新赋值 可隐式声明
const num = 20;
// 6、late 声明非空变量,延迟初始化 运行时检查
// setup();
print(greeting);//输出:Hello,Dart! 若为初始化调用 会报错
}
late var greeting;
void setup(){
greeting = "Hello, Dart!";
}
1.5、作用域及生命周期
变量的有效范围,决定了变量在程序中的可见性和生命周期(变量从创建到销毁的整个过程)。
- 全局变量:
- 在
整个程序运行期间都可见。 - 在
整个程序运行期间都存在。
- 在
- 局部变量:
- 在
函数或代码块中可见。 - 在
函数或代码块进入时创建,在函数或代码块退出时销毁。
- 在
二、常量
是一种特殊类型的变量,一旦赋值后就不能再改变。常量用于存储固定不变的数据,确保这些值在整个程序运行期间保持一致。
2.1、特点
- 1、命名规则:
- 通常使用
大写字母和下划线分隔单词,以区分变量。 - 示例:
MAX_RETRIES,DEFAULT_TIMEOUT.
- 通常使用
- 2、不可变性:
- 一旦初始化,
常量的值不能被修改。
- 一旦初始化,
2.2、编译时常量(const)
使用const修饰,其值在声明时确定(声明同时赋值),其值确定后不可修改,其值在整个程序运行期间是固定的。
代码示例:
/// 定义一个名为 pi 的常量
const double PI = 3.14159;
const int MAX_RETRIES = 3;
const String API_ENDPOINT = "https://api.example.com";
const Duration DEFAULT_TIMEOUT = Duration(seconds: 30);
const List<String> WEEKDAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
2.3、终值(final)
使用final修饰只能赋值一次的变量,一旦赋值后不可修改。
代码示例:
// 1、先声明后赋值
final String name;
name = "zhangsan";
// 2、声明同时赋值
final ing age = 10 ;
//3、一旦赋值后不可修改
name = "Lisi";
三、总结
- 变量:可以随时改变内容的容器,适合存储可能会变化的数据。
- 常量:固定不变的值,确保数据在整个程序运行期间的一致性。
final和const:提供了不同级别的不可变性,帮助编写更安全、高效的代码。
在实际编程中,变量和常量相辅相成,缺一不可。通过合理使用变量,可以创建响应用户输入和外部事件的动态应用;而常量则为我们提供了坚实的基准,确保某些关键数据不会被意外修改。这种结合不仅提高了代码的可读性和维护性,还增强了程序的健壮性和安全性。
码字不易,记得 关注 + 点赞 + 收藏 + 评论