Dart 内置基础类型表
| 分类名称 | 类型标识 | 书写 / 字面量示例 | 简要说明 |
|---|---|---|---|
| Numbers(数字) | int、double | int a = 10; double b = 3.14; | 数字两大类:整数、双精度浮点数,共同父类为 num |
| Strings(字符串) | String | var str = "foxdevelop.com"; | 存储 UTF-16 字符序列,支持插值、多行、原始字符串 |
| Booleans(布尔) | bool | bool flag = true; | 仅两个取值:true /false |
| Records(元组记录) | 记录字面量 (v1, v2) | var record = (10, "test"); | 固定长度多值复合类型,支持解构赋值 |
| Functions(函数) | Function | void fn() {} Function func = ()=>1; | 一等对象,可赋值、传参、作为返回值 |
| Lists(列表 / 数组) | List | var list = [1,2,3]; | 有序可重复元素集合,等效数组 |
| Sets(集合) | Set | var set = {1,2,3}; | 无序、元素不可重复的集合 |
| Maps(键值映射) | Map | var map = {"name":"Tom"}; | 键值对存储结构,键唯一 |
| Runes(Unicode 码点) | Runes | Runes("\u{1f600}") | 底层读取 Unicode 码点,官方推荐 characters 包替代 |
| Null(空值) | Null | Null n = null; | 唯一取值为 null,空安全体系顶层基础类型 |
Dart 所有变量本质都是对象(类实例),既可以用字面量快速创建,也可以调用对应构造函数初始化。
'hello' 字符串字面量、true 布尔字面量;Map() 构造函数创建 Map。
语言特殊辅助类型
非基础内置,但这些都是dart的关键字。
这类类型承担类型体系、异步、静态检查等特殊作用:
| 类型 | 作用说明 |
|---|---|
Object | 除 Null 外所有 Dart 类的父类 |
Enum | 所有枚举的父类 |
Future / Stream | 异步编程专用 |
Iterable | 用于 for-in 循环、同步生成器 |
Never | 表达式永远无法正常执行完毕(常用来标记永远抛异常的函数) |
dynamic | 关闭静态类型检查,优先用 Object / Object? 替代 |
void | 无返回值,常用作函数返回类型 |
1 Numbers 数字
父类:num
数字分两个子类:int 整数、double 浮点数,都继承自 num
1.1 int 整数
范围区分:(因为dart还可以做前端开发的,所有有个web端)
- 原生端:
-2^63 ~ 2^63 - 1 - Web(JS 底层):
-2^53 ~ 2^53 - 1
无小数点,支持十进制、十六进制 0x
例子
void main() {
// 十进制整数
var pageCount = 123;
// 十六进制
var hex = 0xDEADBEEF;
// 数字下划线分隔符(Dart 3.6+,提升可读性)
var million = 1_000_000;
var mac = 0x00_14_22_01_23_45;
print(pageCount);
print(hex);
print(million);
print(mac);
}Code language: Dart (dart)
执行
123
3735928559
1000000
86469845829
1.2 double 双精度浮点数
包含小数点 / 科学计数法
void main() {
var pi = 3.14; //小学点
var raid = 1.61e5; // 1.61 * 10^5 //科学计数
var tiny = 0.000_000_000_02; // 下划线分隔小数
print(pi);
print(raid);
print(tiny);
}Code language: PHP (php)
3.14
161000.0
2e-11Code language: CSS (css)
1.3 父类 num
变量声明为 num 可同时存 int /double:
void main() {
num money = 5;
money += 2.5; // 自动转为 double,money = 7.5
// int 赋值给 double 自动转 1.0
double zoom = 1;
print(money);
print(zoom);
}Code language: PHP (php)
执行
7.5
1.0Code language: CSS (css)
1.4 类型互相转换
void main() {
// String → int
var one = int.parse('123');
// String → double
var pi = double.parse('3.14');
// int / double → String
String intStr = 99.toString();
String pi2 = 3.14159.toStringAsFixed(2); // 保留2位小数 → "3.14"
print(one);
print(pi);
print(pi2);
}Code language: JavaScript (javascript)
执行
123
3.14
3.14Code language: CSS (css)
1.5 int 特有位运算符
仅 int 支持移位、按位与或异或、取反 ,读者可以参考:Dart Bitwise and shift operators – FoxDevelop
void main() {
print(3 << 1); // 左移 0011 <<1 → 0110
print(3 | 4); // 按位或
print(3 & 4); // 按位与
print(~3); // 按位取反
}Code language: PHP (php)
6
7
0
-4
1.6 数字常量(compile-time constant)
纯数字字面量、常量四则运算可标记 const
代码编译阶段(还没运行程序)就能直接算出固定值,运行时永远不会变、不用临时计算的值,叫编译期常量,用 const 修饰。
const msPerSec = 1000;
const waitSec = 5;
const waitMs = waitSec * msPerSec; // 编译期常量Code language: JavaScript (javascript)
const:编译期常量 ,程序没跑,编译器就能把表达式算出固定值,直接写到编译后的二进制文件里;程序运行时直接读取,不需要计算。
final:运行时常量(运行时才赋值,之后不可改)允许用户设置值,设置后,不能再第二次设置
1.7 内置数学方法
num 自带,复杂计算用 dart:math
abs()、ceil()、floor()、round() 等
num n = -3.6;
print(n.abs()); // 3.6
print(n.ceil()); // -3
print(n.floor()); // -4Code language: PHP (php)
2. String 字符串
UTF-16 编码序列,通常用来表示文本,有两种方式表示,用单引号或者双引号括起来。
2.1 定义方式:单引号 / 双引号
var s1 = '单引号字符串';
var s2 = "双引号字符串";
// 转义符号
var s3 = 'It\'s ok';
var s4 = "It's ok"; // 交替引号无需转义
Code language: JavaScript (javascript)
字符串里有一些字符本身有特殊含义(比如双引号 "、换行、反斜杠 \),直接写会破坏字符串结构,编译器识别出错。
转义符号 \ 用来取消字符的特殊作用,或者输出看不见的特殊符号。
例如,你键盘上面的一些回车,tab键,等等这些是无法看到的东西,需要有转义字符来表示。例如 \t 表示,读者试一下下面就明白
print("name\tage\tcountry");
print("Jack\t18\tUSA");
print("Lucy\t20\tEgypt");Code language: PHP (php)
2.2 字符串插值 ${表达式}
- 变量可省略大括号
$变量 - 对象自动调用
.toString()
void main() {
var word = "interpolation";
var str1 = "Dart has $word";
var str2 = "大写:${word.toUpperCase()}";
print(str2); //大写:INTERPOLATION
}Code language: JavaScript (javascript)
2.3 字符串拼接
- 相邻字面量自动拼接(支持换行)
+运算符拼接
var s1 = "第一行"
"第二行";
var s2 = "a" + "b";
assert(s1 == "第一行第二行");
assert(s2 == "ab");Code language: JavaScript (javascript)
2.4 多行字符串:三引号 ”’ / “””
void main() {
var multi1 = '''
多行
文本
''';
var multi2 = """
双三引号多行
hello foxdevelop.com
""";
print(multi1);
print(multi2);
}Code language: PHP (php)
多行
文本
双三引号多行
hello foxdevelop.comCode language: CSS (css)
单三引号里放双引号、双三引号里放单引号,全都不用转义:
2.5 原始字符串 r”” 不转义任何转义符
var raw = r"换行符 \n 不会生效";
print(raw); // 原样输出 \n
Code language: PHP (php)
2.6 const 常量字符串限制
插值内容必须是编译期常量(数字、bool、常量字符串),不能是普通变量、集合
const num cNum = 10;
const bool cBool = true;
const String cStr = "const";
// 合法常量字符串
const valid = "$cNum $cBool $cStr";
var normalNum = 10;
// 非法:插值包含非常量
// const invalid = "$normalNum";
Code language: JavaScript (javascript)
3. bool 布尔类型
仅两个实例:true / false,均为编译期常量
Dart 强类型规则:不能直接用值判断真假,必须显式比较
void main() {
var emptyStr = "";
print(emptyStr.isEmpty); // 判断空字符串
var zero = 0;
print(zero == 0); // 判断0
var nil = null;
print(nil == null); // 判断null
var nan = 0 / 0;
print(nan.isNaN); // 判断非数字
}Code language: PHP (php)
4. Runes & characters 处理 Unicode 字符
- Runes:暴露字符串底层 Unicode 码点,旧方案
- 推荐
package:characters:处理视觉上完整字符( grapheme 字形簇,如国旗 Emoji)
Unicode 转义语法
- 4 位十六进制:
\uXXXX - 多于 4 位大码点:
\u{十六进制}
var heart = "\u2665"; // ♥
var laugh = "\u{1f606}"; // 😆
Code language: JavaScript (javascript)
characters 包示例
import 'package:characters/characters.dart';
void main() {
var text = "Hi 🇩🇰";
print(text.characters.last); // 输出完整丹麦国旗Emoji
}
Code language: JavaScript (javascript)
5. Symbol 符号
用于反射、代码混淆场景,字面量 #标识符,编译期常量
混淆不会改变 Symbol,适合通过名称动态引用标识符
#userName
#getData
Code language: CSS (css)
6. Null 空值类型
唯一值为 null,空安全体系中 Null 是独立顶层类型,所有可空类型都兼容 null。
String? name = null;
Null n = null;
Code language: JavaScript (javascript)