Dart基础语法<二> 内置类型

95 阅读3分钟

内置类型

对标 Java 的八大内置基本数据类型, Dart 有以下七种内置类型:

  • Numbers
  • Strings
  • Booleans
  • Lists
  • Maps
  • Runes
  • Symbols
Numbers
  1. num是数字类型的父类,有两个子类 intdouble,分别对应整型和浮点型。
  2. intdouble在java中都是关键字,而在dart中是类
  3. int根据编译平台确定占用长度,最长为8字节
  4. int 有个bitLength()方法,可以确定存储需要占用的位数
Strings(字符串)
  1. 字符串是 UTF-16 编码的字符序列。
  2. 使用单双引号均可创建字符串,且单双引号之间可以嵌套使用,可以避免一些\转义符的使用。
void test() {
  String s1 = "\"test\"";
  String s2 = '"test"';
  print(s1);
  print(s2);
}

以上输出均为带双引号的"test"字符串 3. 字符串中可通过**$+{变量}**方式引用变量拼接字符串,或把多个字符串放到一起实现拼接。

void main() {
  String s1 = "Juice";
  String s0 = "is";
  String s2 = "My name  ${ s0}${s1}";
  String s3 = "My name  is" "Juice";
  print(s2);
  print(s3);
}

当然也可以像java一样通过 + 操作符拼接字符串 4. 使用连续三个单双引号可以创建多行字符串对象

void main() {
String s1="""My
  name
  is
 Juice""";
  String s2='''My
 name
  is
Juice''';
  print(s1);
  print(s2);
}

5.String提供一个 r 前缀用于创建 “原始 raw” 字符串

void main() {
  //换行符
  String s1 = "\n";
  //输出\n
  String s2 = "\\n";
  //前面加上r前缀 标识raw:原始字符
  //输出同s2
  String s3 = r"\n";
}
Booleans(布尔值)

​Dart中称为 bool 的类型。 只有truefalse 两个布尔类型对象,和Java没太大的区别。

Lists(数组)
  1. Dart 中,数组就是List对象。
  2. List进行遍历也和Java一样。
void main() {
  List<int> list = new List();
  List<int> list1 = List();
  List<int> list2=[1,2,3,4,5];
  print(list2[1]);//获取下标为1的值
  //遍历数组
  //iter for-in 模板
  for (var o in list) {

  }
  //itar for-i模板
  for (var i = 0; i < list1.length; ++i) {
    var o = list1[i];

  }
}
  1. 注意区分 const 修饰数组的使用
  • const修饰数组对象,则对象不可变,不能再添加元素,会报以下错误
  • const修饰变量,即引用,则变量不能再引用其他对象,也不能再添加元素
void main() {
  List<int> list3 = const [3, 4, 5, 6];
  list3.add(8);
}

数组.png

void main() {
  const List<int> list4 =  [3, 4, 5, 6];
//  list4=[3,2,1];报错   
//  list4.add(5); 报错

}
Maps(映射集合)
  1. 键和值可以是任何类型的对象。
  2. 每个键只出现一次, 而一个值可以出现多次
  3. 对于不存在的key,则返回null
  4. 遍历和java一致
  5. constMap修饰参考上面的List
void main() {
  //声明
  Map<int, int> map = {1: 1, 2: 2, 3: 3};
  print(map[1]); //获取key为1的值,注意这里的1是key不是下标
  map[1] = 5; //修改key为1的元素值
  map[8] = 120; //添加key为8的元素
  print(map[1]);
  print(map[8]);
}
Runes(用于字符串中Unicode字符的表示)

Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义了唯一的数值。 Dart 字符串本身只支持UTF-16 位代码单元字符序列, 所以出现Runes类用于UTF-32字符集中string 对象表示。

  1. 表达Unicode代码点的常用方法是 \uXXXX ,其中 XXXX 是4位十六进制值
  2. 要指定多于或少于4个十六进制数字,需要将值放在大括号中
void main() {
  var clapping = '\u{1f44f}';
  //5个16进制 需要使用{}
  print(clapping); //👏
  //获得 16位代码单元
  print(clapping.codeUnits); //[55357, 56399]
//获得unicode代码
  print(clapping.runes.toList()); //[128079]
  Runes input = new Runes(
      ' \u{1f47b}  \u{1f44d}');
  print(String.fromCharCodes(input));//输出 👻  👍
}
Symbols

操作符标识符,表示程序中声明的运算符或标识符。

var i = #A; //常量
print(a.runtimeType);//获取对象运行时的类型 输出Symbol

目前看来,SymbolsRunes在日常开发中较少使用。