Dart 内置类型

Dart 内置基础类型表

分类名称类型标识书写 / 字面量示例简要说明
Numbers(数字)int、doubleint a = 10; double b = 3.14;数字两大类:整数、双精度浮点数,共同父类为 num
Strings(字符串)Stringvar str = "foxdevelop.com";存储 UTF-16 字符序列,支持插值、多行、原始字符串
Booleans(布尔)boolbool flag = true;仅两个取值:true /false
Records(元组记录)记录字面量 (v1, v2)var record = (10, "test");固定长度多值复合类型,支持解构赋值
Functions(函数)Functionvoid fn() {} Function func = ()=>1;一等对象,可赋值、传参、作为返回值
Lists(列表 / 数组)Listvar list = [1,2,3];有序可重复元素集合,等效数组
Sets(集合)Setvar set = {1,2,3};无序、元素不可重复的集合
Maps(键值映射)Mapvar map = {"name":"Tom"};键值对存储结构,键唯一
Runes(Unicode 码点)RunesRunes("\u{1f600}")底层读取 Unicode 码点,官方推荐 characters 包替代
Null(空值)NullNull n = null;唯一取值为 null,空安全体系顶层基础类型

Dart 所有变量本质都是对象(类实例),既可以用字面量快速创建,也可以调用对应构造函数初始化。

'hello' 字符串字面量、true 布尔字面量;Map() 构造函数创建 Map。

语言特殊辅助类型

非基础内置,但这些都是dart的关键字。

这类类型承担类型体系、异步、静态检查等特殊作用:

类型作用说明
ObjectNull 外所有 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 字符串拼接

  1. 相邻字面量自动拼接(支持换行)
  2. + 运算符拼接
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 字符

  1. Runes:暴露字符串底层 Unicode 码点,旧方案
  2. 推荐 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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注