天天看点

Dart 数据类型,你需要了解一下

Dart 数据类型,你需要了解一下

作者 | __white

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​

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

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


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

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

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右边必须是常量      

感谢阅读,本文完~

学习更多技能

请击下方公众号