系统化掌握Dart编程之变量与常量

449 阅读6分钟

image.png

前言

变量与常量——编程世界的基石

在编程中,数据如同流动的河流,时而平静,时而激荡。为了驾驭这股力量,程序员们发明了两种基本工具:变量常量。它们就像是编程语言中的螺丝钉和齿轮,看似简单却不可或缺,共同构建起了复杂而精妙的应用程序。

千曲而后晓声,观千剑而后识器。虐它千百遍方能通晓其真意

一、变量

1.1、定义

在计算机科学中,变量是用于存储数据的基本概念。可看作是一个存储数据容器其值可在程序运行中被改变。它具有一个名称标识符)和一个数据类型(如整型字符串型等),并且可根据需要多次赋值和修改

详细说明

  • 1、标识符变量名):
    • 用于在程序中引用该变量。
    • 遵循标识符的命名规则,具体可查看标识符章节。
  • 2、数据类型
    • 变量可存储的数据类型,如基本数据类型。
    • 静态类型语言,变量的数据类型必须在声明时指定
    • 动态类型语言,变量的数据类型可以在运行时确定
    • Dart既是静态类型语言,也是动态类型语言。
  • 3、变量的值
    • 存储在变量中的实际数据
    • 变量的值可以被读取修改

1.2、特点

  • 1、命名规则:遵循语言特定的命名规则
  • 2、可变性:变量的值可以在程序运行期间被多次赋值和修改
  • 3、内存限制:不同的数据类型所占的内存大小不同,注意数据类型的取值范围
  • 4、作用域:变量的有效范围,决定了变量在程序中的可见性生命周期

1.3、深入理解

fd44b8cb-68f3-4b4c-a80d-52c121865534.jpg 关于存储功能,在日常生活中,最容易联想到的便是储物柜了,可以把变量看作是一个储物柜

  • 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_RETRIESDEFAULT_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";

三、总结

  • 变量:可以随时改变内容的容器,适合存储可能会变化的数据。
  • 常量:固定不变的值,确保数据在整个程序运行期间的一致性。
  • finalconst:提供了不同级别的不可变性,帮助编写更安全、高效的代码。

在实际编程中,变量常量相辅相成,缺一不可。通过合理使用变量,可以创建响应用户输入和外部事件的动态应用;而常量则为我们提供了坚实的基准,确保某些关键数据不会被意外修改。这种结合不仅提高了代码的可读性维护性,还增强了程序的健壮性安全性

码字不易,记得 关注 + 点赞 + 收藏 + 评论