前言
学习之路需深耕细作,切勿轻视任一知识点,因其存在必蕴含深意
- 数据类型的存在意义在于确保数据的准确性和一致性,提高程序的健壮性和可维护性。通过对数据进行分类,数据类型能够明确指定数据的存储方式、取值范围及可进行的操作。
基本数据类型
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>;
- 在这个例子中,
StringList是List<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()等方法都可实现显式转换