深入理解Dart中的数据类型

236 阅读3分钟

屏幕截图 2025-01-07 212903.png

前言

学习之路需深耕细作,切勿轻视任一知识点,因其存在必蕴含深意

  • 数据类型的存在意义在于确保数据的准确性和一致性,提高程序的健壮性和可维护性。通过对数据进行分类,数据类型能够明确指定数据的存储方式、取值范围及可进行的操作。

基本数据类型

1. dynamic类型

  • dynamic 类型的变量可以在运行时被赋予任何类型的值。
dynamic value = 42; 
value = "Hello, World!"; 
value = [1, 2, 3];
  • 当你访问 dynamic 类型变量的属性或方法时,Dart 会在运行时进行类型检查。如果类型不匹配,将会抛出一个运行时异常。
dynamic value = "Hello, World!"; 
print(value.length); // 正确,因为字符串有 length 属性 
value = 42; 
print(value.length); // 错误,整数没有 length 属性,运行时将抛出异常

2. num类型

  • 在Dart中,num 是一个抽象类型,它代表所有的数字类型。实际上,num 有两个具体的子类:int 和 double。这意味着当你声明一个 num 类型的变量时,你可以将 int 或 double 类型的值赋给它。然而,在Dart的实践中,直接使用 int 和 double 更为常见,因为 num 类型主要用于函数签名和泛型约束,以提供更大的灵活性。

3. int类型

int age = 25; // 声明一个整数变量并赋值
  • int 类型用于表示整数,即没有小数部分的数字。在Dart中,整数的大小取决于底层平台的实现,但通常是一个64位的值(-2^63 ~ 2^63 - 1

4. double类型

double height = 1.75; // 声明一个浮点数变量并赋值
  • double 类型用于表示浮点数,即包含小数部分的数字。在Dart中,double 是一个64位的双精度浮点数,遵循IEEE 754标准。这意味着 double 可以表示非常大或非常小的数字,但可能会因为精度限制而引入微小的舍入误差。为了处理这种情况,可以使用 double.parse或者第三方库如 decimal来提高精度。

5. String类型

String name = "Alice"; // 声明一个字符串变量并赋值 
String greeting = 'Hello, $name!'; // 使用字符串插值
  • String 类型用于表示文本数据。在Dart中,字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。然而,你可以通过字符串操作(如拼接、分割、查找和替换)来生成新的字符串。Dart支持多种字符串字面量语法,包括单引号、双引号和三重引号(用于多行字符串)。
  • 字符串插值允许你在字符串中嵌入变量或表达式的值,这是通过 ${} 语法实现的。在上面的例子中,$name 会被替换为变量 name 的值。

6. 布尔类型

bool isTrue = true; // 声明一个布尔变量并赋值为 true 
if (isAdult) { 
  print("True."); 
} else { 
  print("False."); 
}
  • 布尔类型是Dart中的基本数据类型之一,用于表示逻辑上的真和假。布尔类型的值只有两个:true 和 false。布尔类型在条件判断和逻辑运算中非常重要。

特殊类型

1.函数类型(function)

void greet(String name) => print("Hello, $name!");
Function callback = greet;
callback("Alice"); // 输出: Hello, Alice!

  • 函数类型是Dart中一种特殊的数据类型,它允许你将函数作为参数传递给其他函数

2. 符号类型(Symbol)

Symbol symbol = #myVariable;
print(symbol); // 输出: Symbol('myVariable')

  • 表示Dart代码中的标识符。
  • 主要用于反射(reflection)和元编程。

3. 枚举类型(enum)

enum Direction { north,east,south,west }
Direction myDirection = Direction.west;
print(myDirection); // 输出: Direction.west

  • 枚举类型用于定义一组命名的常量。枚举在表示固定集合的值时非常有用,例如星期、方向或状态码。

4.类型别名

typedef StringList = List<String>;
  • 在这个例子中,StringListList<String>的类型别名。你可以像使用List<String>一样使用StringList

类型转换

1. 隐式转换

int a = 10;
double b = 15.5;
print(a+b);//结果输出25.5
  • 当进行数值运算时,如果操作数的类型不匹配,Dart会自动进行隐式类型转换以保证运算的正确性。例如,当一个整数(int)和一个浮点数(double)进行运算时,整数会被转换为浮点数。

2.显式转换

int num2 = 42; String str2 = num2.toString(); // 将整数转换为字符串
  • toString()方法主要用于将对象转换为字符串表示,但它也可以看作是一种显式类型转换的形式
  • toint()todouble()等方法都可实现显式转换