dart学习记录2
一、基本数据类型
- 数字类型
num
(int
,double
) - 字符串类型(
String
) - 布尔类型(
bool
) - 记录类型records(
(value1, value2)
) - 列表(
list
也成为数组) - 集合(
set
) - map类型(
map
) - runes类型(Runes 是一个表示 UTF - 32 字符序列的类型)
- 符号类型(
symbol
) - null类型(
null
) - dynamic 类型
1.recods记录类型
记录是一种匿名的、不可变的数据结构,它可以包含多个不同类型的值。这些值被称为记录的字段,每个字段可以有一个可选的名称。
示例
// 创建一个包含两个值的记录
var point = (10, 20);
// 访问记录中的值,使用索引从 0 开始
print(point.$1); // 输出: 10
print(point.$2); // 输出: 20
// 创建一个包含命名字段的记录
var person = (name: 'John', age: 30);
// 访问记录中的值,使用字段名
print(person.name); // 输出: John
print(person.age); // 输出: 30
var record = ('first', a: 2, b: true, 'last', ['a', 'b']);
print(record.$1); //first
print(record.a); //2
print(record.b); //true
print(record.$2); //last
print(record.$3[0]); //a
2.dynamic 类型
dynamic
类型可以用来声明变量、函数参数、返回值等,使用 dynamic 声明的变量可以在运行时持有任意类型的值,并且 Dart 编译器不会对其进行类型检查。也就是说,你可以给 dynamic 类型的变量赋予不同类型的值,调用该变量上任意的方法或访问属性,编译器不会报错,只有在运行时才会根据实际情况进行处理。
示例代码
- 变量声明
void main() {
dynamic myVariable;
myVariable = 10; // 可以赋值为整数
print(myVariable);
myVariable = 'Hello'; // 也可以赋值为字符串
print(myVariable);
myVariable = [1, 2, 3]; // 还可以赋值为列表
print(myVariable);
}
- 函数参数和返回值
dynamic add(dynamic a, dynamic b) {
return a + b;
}
void main() {
var result1 = add(1, 2); // 传入整数
print(result1);
var result2 = add('Hello', ' World'); // 传入字符串
print(result2);
}
3.类型注释
类型注释指的是在变量、函数参数或返回值处显式指定的类型信息,帮助静态分析和提高代码可读性。
语法:在变
var uniqueNames = {'Seth', 'Kathy', 'Lars'}; //编译器可以自动类型推导为Strng
var uniqueNames = <String>{'Seth', 'Kathy', 'Lars'}; //类型注释,明确指定类型为String
var nameAgeMap = <String, int>{
'Seth': 25,
'Kathy': 30,
'Lars': 35
};
// 明确指定映射的键为 String 类型,值为 int 类型
4.泛型
泛型允许你创建可重用的组件,这些组件可以处理多种数据类型而不仅仅是单一类型。通过在类、方法或函数的定义中使用类型参数,你可以在使用这些组件时指定具体的类型。
- 泛型类
class Box<T> {
T value;
Box(this.value);
T getValue() {
return value;
}
}
void main() {
// 创建一个存储整数的 Box 实例
Box<int> intBox = Box<int>(10);
print(intBox.getValue()); // 输出: 10
// 创建一个存储字符串的 Box 实例
Box<String> stringBox = Box<String>("Hello");
print(stringBox.getValue()); // 输出: Hello
}
- 泛型接口
T add<T>(T a, T b) {
if (T == String) {
return ((a as String) + (b as String)) as T; //as类型,转换为Strinfg
} else if (T == int || T == double) {
return ((a as num) + (b as num)) as T;
}
throw ArgumentError('Unsupported type for addition');
}
void main() {
dynamic result1 = add<int>(1, 2);
print(result1);
result1 = add<double>(1.5, 2.5);
print(result1);
result1 = add<String>('Hello', ' World');
print(result1);
}