Dart 数据类型

更新日期: 2021-08-14阅读: 1.5k标签: Dart

Dart的所有东西都是对象。它们都继承自Object,默认是都是null。Dart中支持以下数据类型:

  • Number 数值型
  • String 字符串
  • Boolean 布尔型
  • List 数组
  • Map 键值对
  • Runes ([String]的符文(整数Unicode代码点))

数值型 num

Dart中提供了两种数值类型, 分别是整型int和浮点型double.

void main() {
  //定义一个数值型a, 给a赋值为1
  num a = 1; 
  print(a);  //打印a的值为1
 
  a = 1.1;  //给a赋值为1.1 
  print(a); // 打印a的值为1.1

  int b = 1;
  b = 1.1 //此时会报错:A value of type 'double' can't be assigned to a variable of type 'int'.
}

可以发现, 如果是使用 num 声明的变量,那么可以在 int 和 double 之间相互转换.

但如果是直接定义了 int 或者 double , 那么就不能再赋其他类型的值.

数值的操作

运算符 :

  • + ,
  • - ,
  • * ,
  • / ,
  • ~/,
  • %

加减乘都好理解了 , 我们看一下剩下的几个操作:

void main() {
  var a = 5 / 2;  // 2.5

  var b = 5 ~/ 2; // 2
  
  var c = 5 % 2;  // 1
}

直接使用 / 获得的结果是长除法的结果 , 而使用 ~/ 获得的结果是短除法中的商, 而是用 % 就是取余数的操作了.

常用属性

  • isNaN : num的属性,判断一个对象是否为非数字,是数字则返回false,否则返回true.
  • isEven : int 的属性,判断一个数字是否为偶数
  • isOdd : int 的属性,判断一个数字是否为奇数
  • sign : 返回该整数的符号(对于0返回0,对于小于0的值返回 -1,对于大于0的值返回 1。)
void main() {
  int i = 1;

  print(i.isNaN);   // false
  print(i.isOdd);   // true
  print(i.isEven);  // false
  print(i.sign);      //1
}

常用方法

  • abs() : 返回该整数的绝对值
  • round() : 返回四舍五入的近似值
  • floorl() : 向下取整
  • ceil() : 向上取整
  • toInt() : 转成int类型 (舍去小数)
  • toDouble() : 转成double型
  double i = 1.5;

  print(i.sign);   //1.0
  print(i.abs());  //1.5
  print(i.round()); //2
  print(i.ceil()); //2
  print(i.floorl()); //1
  print(i.toInt().toDouble()); //1.0

字符串

声明字符串

普通字符串使用单引号或者双引号都可以,多行的可以使用'''来包裹.

  String a = '我是字符串';
  String b = '我也是字符串';
  String c = '''第一行
第二行 ''';

声明原始字符串,直接在字符串前加字符“r” , 可以避免“\”的转义作用,在正则表达式里特别有用

  print('换行符: \n');   //输出 : 换行符:

  print(r'换行符: \n');  //输出 : 换行符: \n*/

字符串拼接

//使用+ 连接
String a = '字符串1'+'字符串2';

//使用空格拼接
String b = 'adc' 'def' 'gg1';

//拼接对象和表达式
String a = 'a';

String k = '123${a.toString()}';
String s = '123${a}';
String l = '123$a';

可以在字符串中使用${}中包裹来实现拼接, 如果{}内是一个对象可以省略{}.

布尔值

为了表示布尔值,Dart有一个名为的类型bool。 只有两个对象具有bool类型:true和false,它们都是编译时常量。

assert 是语言内置的断言函数,仅在检查模式下有效 如果断言失败则程序立刻终止

 String name = 'Li';
 assert(name == "Li");

List

称作集合(数组). 是有序且可重复的.

List a = [];
List b = [1,2,3,"a"];
List c = new List();
List<int> d = [1,2,3];

map

是键值对的集合, 一般来说,map是将键和值相关联的对象。键和值都可以是任何类型的对象。 每个键只出现一次,但你可以多次使用相同的值。Dart支持map由map文字和map类型提供。

const final var

再聊点constfinal,用法和其他语言类似 在声明变量的时候,除了var,还可以使用constfinal 同时,在使用constfinal的时候,可以省略var或者其他类型

var i = 10;
const i = 10;
final i = 10;

int i = 10;
const int i = 10;
final int i = 10;

constfinal定义的都是常量,值不能改变 并且在声明的时候就必须初始化 但是也有细微差别,简单来说

const定义的是编译时常量,只能用编译时常量来初始化 final定义的常量可以用变量来初始化

final time = new DateTime.now(); //Ok
const time = new DateTime.now(); //Error,new DateTime.now()不是const常量

var、final等在左边定义变量的时候,并不关心右边是不是常量 但是如果右边用了const,那么不管左边如何,右边都必须是常量

const list = const[1,2,3];//Ok
const list = [1,2,3];//Error

final list = [1,2,3];//Ok
final list = const[1,2,3];//Ok
final list = const[new DateTime.now(),2,3];//Error,const右边必须是常量

作者:__white
链接:https://juejin.cn/post/6996250246313410596
来源:掘金

链接: https://www.fly63.com/article/detial/10645

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!