我正在参加跨端技术专题征文活动,详情查看:juejin.cn/post/710123… 。
今天继续学习 Flutter 的编程语言 Dart 的语法基础,主要是关于数据类型中 Boolean 和 String 的内容。
Boolean
dart 中可以通过 bool 关键字来声明布尔类型的数据,布尔类型只有 true 和 false 这 2 个值。在 dart 中对变量进行判断要显式地检查布尔值:
// 例 1
void main() {
bool flag = true;
if (flag) {
print('Hello, Juejin!');
}
}
而不能像在 js 那样判断非 0 即真或非空即真:
// 例 1.1
void main() {
var flag = 1;
// 错误的写法
if (flag) {
print('Hello, Juejin!');
}
// 正确的写法
if (flag == 1) {
print('Hello, Juejin!');
}
}
像例 1.1 第 5 行的写法就是错误的,因为 dart 是强类型的语言,不会进行隐式的类型转换。另外再说明一点,第 9 行我们是用 == 来做的值是否相等判断,在 dart 中是没有 js 中的 === 符号的,因为 js 是弱类型的语言,所以需要用 === 来判断类型是否相等。
String
定义
dart 字符串是 UTF-16 编码单元的序列。可以通过 String 关键字来声明字符串类型的数据,创建时可以像在 js 中那样使用单引号或双引号创建字符串:
// 例 2
void main() {
// 单引号
String str1 = 'Hello, Dart!';
print(str1);
// 双引号
String str2 = "Hello, Dart!";
print(str2);
}
另外,dart 中还可以使用 3 个引号来创建多行字符串,可以是 3 个单引号也可以是 3 个双引号:
// 例 2.1
void main() {
String str = '''
圣火昭昭,
圣火耀耀,
凡我子弟,
喵喵喵喵!
''';
print(str);
}
如此,打印结果就是有换行的:

字符串的拼接
dart 中用 + 可以做字符串的拼接,也可以直接在引号内通过类似于 js 模板字符串的形式,通过 ${表达式} 来进行字符串和表达式的拼接,当表达式只是一个变量时,{} 可以省略:
// 例 2.2
void main() {
String name = 'Jay';
print('他的名字是' + name); // 他的名字是Jay
print('他的名字是${name}'); // 他的名字是Jay
print('他的名字是$name'); // 他的名字是Jay
}
但是如果 ${表达式} 里的不是一个单纯的变量,就不能省略大括号:
// 例 2.3
void main() {
String name = 'Jay';
print('name 的运行时类型是${name.runtimeType}'); // name 的运行时类型是String
print('name 的运行时类型是$name.runtimeType'); // name 的运行时类型是Jay.runtimeType
}
可以看见例 2.3 第 5 行如果省略了 {} 就会得不到我们想要的结果。
属性和方法
String 除了作为关键字之外也有个对应的类,有着相应的一些类的属性和方法,有些是 dart 有而 js 没有的,比如判断字符串是否为空的属性 isEmpty:
// 例 2.4
void main() {
print(''.isEmpty); // true
}
有些和 js 的 String 对象差不多,比如用于分割字符串的 split() 等,详情可以查阅官方文档。
正则表达式
js 中可以通过 RegExp 对象创建正则表达式,方式为 new RegExp('正则表达式') 或是 new RegExp(/正则表达式/)。在 dart 中也可以通过 RegExp,但是写法有所不同, 为 RegExp(r'正则表达式'):
// 例 2.5
void main() {
print('a1b2c3d'.replaceAll(RegExp(r'\d+'), '-')); // a-b-c-d
}
