在 Dart 中,有多种内置的数据类型。以下是常见的几种类型及其示例:
整数 (
int
):- 用于表示整数值。
- 示例:
int d = 5;
浮点数 (
double
):- 用于表示带有小数部分的数值。
- 示例:
double pi = 3.14;
字符串 (
String
):- 用于表示文本。
- 示例:
String name = "Alice";
布尔值 (
bool
):- 用于表示真或假。
- 示例:
bool isTrue = true;
列表 (
List
):- 用于存储有序的集合。
- 示例:
List<int> numbers = [1, 2, 3];
集合 (
Set
):- 用于存储无序且唯一的集合。
- 示例:
Set<String> names = {"Alice", "Bob", "Charlie"};
映射 (
Map
):- 用于存储键值对。
- 示例:
Map<String, int> ages = {"Alice": 25, "Bob": 30};
动态类型 (
dynamic
):- 用于表示任何类型的值,编译器不会进行类型检查。
- 示例:
dynamic value = 5; value = "Hello";
空类型 (
Null
):- 用于表示空值。
- 示例:
Null nothing = null;
函数类型 (
Function
):- 用于表示函数。
- 示例:
Function add = (int a, int b) => a + b;
符号类型 (
Symbol
):- 用于表示符号,通常在反射中使用。
- 示例:
Symbol symbol = #name;
示例代码
void main() {
// 定义一个整型变量 d,初始值为 5
int d = 5;
// 定义一个双精度浮点型变量 pi,初始值为 3.14
double pi = 3.14;
// 定义一个字符串变量 name,初始值为 "Alice"
String name = "Alice";
// 定义一个布尔型变量 isTrue,初始值为 true
bool isTrue = true;
// 定义一个整型列表 numbers,包含 1, 2, 3 三个元素
List<int> numbers = [1, 2, 3];
// 定义一个字符串集合 names,包含 "Alice", "Bob", "Charlie" 三个元素
Set<String> names = {"Alice", "Bob", "Charlie"};
// 定义一个字符串到整型的映射 ages,包含 "Alice" 对应 25,"Bob" 对应 30
Map<String, int> ages = {"Alice": 25, "Bob": 30};
// 定义一个动态类型变量 value,初始值为 5
dynamic value = 5;
// 将 value 的值修改为 "Hello"
value = "Hello";
// 定义一个空值变量 nothing,其值为 null
Null nothing = null;
// 定义一个函数 add,接受两个整型参数,返回它们的和
Function add = (int a, int b) => a + b;
// 定义一个符号变量 symbol,其值为 #name
Symbol symbol = #name;
// 打印变量 d 的值
print(d);
// 打印变量 pi 的值
print(pi);
// 打印变量 name 的值
print(name);
// 打印变量 isTrue 的值
print(isTrue);
// 打印列表 numbers 的值
print(numbers);
// 打印集合 names 的值
print(names);
// 打印映射 ages 的值
print(ages);
// 打印变量 value 的值
print(value);
// 打印变量 nothing 的值
print(nothing);
// 调用函数 add,传入 2 和 3,打印返回值
print(add(2, 3));
// 打印符号变量 symbol 的值
print(symbol);
}
当你为变量、参数或另一个相关组件指定类型时,可以控制该类型是否允许 null 。要让一个变量可以为空,你可以在类型声明的末尾添加 ? 。
延迟初始化变量
指在声明变量时不立即初始化它,而是在第一次使用该变量时才进行初始化。这通常用于提高性能,因为它允许你在需要时才分配资源。
要在Dart中创建一个延迟初始化变量,你可以使用late关键字。以下是一个示例:
void main() {
late String name;
// 在这里,name变量还没有被初始化
name = "Alice";
// 现在,name变量已经被初始化了
print(name); // 输出: Alice
}
在这个例子中,name变量被声明为late,这意味着它的初始化被延迟到了name = "Alice";这一行。在这之前,如果你尝试打印name,你会得到一个运行时错误,因为name还没有被初始化。
延迟初始化变量对于那些在程序启动时不需要立即使用,但在某个时刻会被使用的变量特别有用。它可以帮助减少内存使用,并提高程序的启动速度。
var定义变量
注意:Dart 中,使用 var 关键字定义变量时,类型会根据变量的初始值自动推导出来。这意味着你可以在声明变量时不指定类型,编译器会根据变量的初始值自动推断出类型。
使用var定义字符串类型
PS废话篇:定义字符串类型可以使用''单引号或者""双引号进行定义,只有定义字符串类型才使用双引号或者单引号,其他类型都不需要双引号或者单引号包裹。
下面这两种定义字符串(也可通过制定具体类型进行定义,例如通过"String"这个关键词定义一个字符串类型,"String namea = 'Bob';",注意的是通过“String”这个方法定义字符串还是需要使用''单引号或者""双引号。)方式是等价的:
var namea = 'Bob';
var nameb = "Bob";
使用var定义整型类型
注意:定义整型类型的时候就不需要单引号或者双引号,如果加上就变成了字符串类型
重要提示:定义整型类型的时候只能为正数或者负数
// 新手一般都会出现的错误如下面这种写法。
var namea = 5487Bob; // 像这种就是错误写法
var nameb = 123355; // 定义一个正数
var nameb = -123355; // 定义一个负数
使用var定义浮点数类型
注意:定义浮点数类型的时候就不需要单引号或者双引号,如果加上就变成了字符串类型
重要提示:定义浮点数类型的时候只能为正浮点数或者负浮点数
// 新手一般都会出现的错误如下面这种写法。
var namea = 548.7Bob; // 像这种就是错误写法
var nameb = 123355.00003668989; // 定义一个正浮点数
var nameb = -123355.00003668989; // 定义一个负浮点数
使用var定义布尔类型
重要提示:布尔类型只有true 和 false 两个值,所以定义的时候只能使用true 和 false
var nameb = abc; // 错误写法
var nameb = false; // 定义一个假布尔值
var nameb = true; // 定义一个真布尔值
使用var定义数组类型
重要提示:定义数组需要使用[]方括号进行包裹
var nameb = [1, 2, 3]; // 定义一个一维数组
var nameb = [1, 2, 3,[1, 2, 3]]; // 定义一个二位数组
var nameb = [1, 2, 3,[1, 2, 3,[1, 2, 3,[1, 2, 3]]],[1, 2, 3]]; // 定义一个多维数组
String字符串定义避坑
//报错原因是 string 类型名首字母未大写,Dart 中字符串类型的正确写法是 String。
String b = '5'; // 正确写法
string b = '5'; // 错误写法
List数组定义避坑
//报错原因是 list 类未定义。Dart 中定义列表应该使用 List,而不是 list。list 不是 Dart 语言中的有效关键字或类名
List<int> numbers = [1, 2, 3]; // 正确写法
list<int> numbsers = [1, 2, 3]; // 错误写法
Set集合定义避坑
//报错原因是 set 是 Dart 语言中的保留关键字,不能用作类型名。正确的类型名应该是 Set。
Set<String> numbers = {"Alice", "Bob", "Charlie"}; // 正确写法
set<String> numbers = {"Alice", "Bob", "Charlie"}; // 错误写法
Map映射定义避坑
//报错原因是 map 是 Dart 语言中的保留关键字,不能用作类型名。正确的类型名应该是 Map。
Map<String, int> numbers = {"Alice": 25, "Bob": 30}; // 正确写法
map<String, int> numbers = {"Alice": 25, "Bob": 30}; // 错误写法
Null定义避坑
Null nothing = null; // 正确写法
null nothing = null; // 错误写法
Function函数定义避坑
//报错原因是 function 关键字在 Dart 中并不存在,正确的关键字应该是 Function。
Function add = (int a, int b) => a + b; // 正确写法
function add = (int a, int b) => a + b; // 错误写法
Symbol符号定义避坑
Symbol symbol = #name; // 正确写法
symbol symbol = #name; // 错误写法
数组定义和遍历
void main(){
// 定义一个整数列表 nums,包含 1 到 10 的整数
List<int> nums=[1,2,3,4,5,6,7,8,9,10];
//var nums = <int> [1,2,3,4,5,6,7,8,9,10];
// 初始化变量 sum,用于存储列表中所有元素的总和,初始值为 0
int sum=0;
// 使用 for 循环遍历列表 nums 中的每个元素
for(int i=0;i<nums.length;i++){
// 将当前元素加到 sum 中
sum=sum+nums[i];
}
// 打印 sum 的值,即列表中所有元素的总和
print(sum);
}