Dart 的数据类型 —— Boolean 与 String

645 阅读2分钟

我正在参加跨端技术专题征文活动,详情查看: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);
}

如此,打印结果就是有换行的:

image.png

字符串的拼接

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
}

感谢.gif 点赞.png