Dart2基础(一) - 数据类型和变量

本文介绍了Dart2中的基本数据类型,包括整型(int)、浮点型(double)、字符串(String)和布尔型(bool)。详细阐述了不同类型的特点,如整型在DartVM和JS中的范围差异,浮点型遵循的IEEE754标准,以及字符串的定义与转义。此外,还讲解了变量的声明,包括var、final和const的使用及其区别,并提到了类型转换的方法。最后预告了接下来会介绍的list, map, rune, symbol等其他类型。" 124721369,12445100,CentOS7安装Zabbix4.0教程,"['Linux', 'Zabbix', '系统监控', '数据库管理', '服务器管理']

目录

数据类型

变量

常量


  • 数据类型

  • 整型(int)

整型是不超过64位,不同的平台位数不一样。如果是DartVM, 整型的范围是2^63-1到-2^63。如果需要编译成js代码,那么整型的范围就是2^53-1到-2^53。

// 整型10进制
int a = 1;
// 整型16进制,以0x开头
int hex = 0xEABDF;
  • 浮点型(double)

浮点型是64位的数字,包括小数位数,并符合IEEE754标准。一个数字只要有小数点,就是double类型。

整型和浮点型都是num类型的子类型。num类型包含基础的操作 +(加)、-(减)、*(乘)和/(除),以及包含一些简单的函数,比如: 取整函数abs()等等。一些负载的计算函数,可以在math包中找到。另外需要说明的是位移运算>>,是在int类中,所以仅支持整型运算。

// 普通定义
double a = 1.2;
// 指数定义
double exponents = 1.2e10;
  • 字符串(String)

字符串类型是使用Unicode-16存储。定义字符串类型可以用单引号,也可以用双引号。定义多行字符串可以使用三个单引号或者三个双引号。

String s = "this is dart2";
String s2 = 'this is dart2';
// 使用==判断字符串是否相等
print(s == s2); // true
String s3 = '''
这是一个
多行
字符串
''';

在字符串内部可以是用${expression}来替换内容。

String s = "this is dart2";
String s2 = "It will say:'${s.toUpperCase()}'";

print(s2); // 显示: It will say:'THIS IS DART2';

int n = 16;
print("age is ${n * 2}"); // 显示:age is 32

如果不想字符串里面的转义字符被表达,如:\n,\t等等,那么需要在字符串定义前添加‘r’,表示这是一个原始字符串,不需要转义。

String s1 = "Hello \n world";
print(s1); // \n将被显示为换行
String s2 = r"Hello \n world";
print(s2); // 显示: Hello \n world
print(s1 == s2); // false
  • 布尔型(bool)

布尔类型只有两个值false和true。

bool b = true;
bool nb = false;
  • 类型转换

所有的非字符串类型,都可以用toString()转为字符串。数字(num)类型可以使用parse方法将字符串转为相对应的数字。l

String sd = "1.2";
String si = "2";
int i = 12;
double d = 1.5;
bool b = true;

print(double.parse(sd));
print(int.parse(si));
print(i.toString());
print(d.toString());
print(b.toString());
  • 变量

变量的声明除了具体的类型int、double、String和bool以外,还可以用var声明变量。var可以根据初始化的值判定是什么类型的,但是,一旦类型确定,就无法更改类型。

变量如果没有赋值,那么变量的默认值就是null, 在Dart2中,所有类型都是对象,所以所有对象的默认值都是null。

var s = "this is dart2";
var n = 16;
var b = true;
var d = 3.14;
print(s is String); // true
print(n is int); // true
print(b is bool); // true;
print(d is double); // true;

s = 12; // 报错,string类型无法指定为int类型

var nullVar;
print(nullVar == null); // true
int nullInt;
print(nullInt == null); // true
bool nullBool;
print(nullBool == null); // true

如果变量的类型是动态的变化的,可以用dynamic声明。

dynamic d = "this is dart2";
print(d is String); // true
d = 12;
print(d is int); // true
  • 常量

常量可以用final和const的来声明。final和const都可以做类型的推断,与var的声明方式一样,也可以具体的赋予某个类型。但是不能和var混用。

final finalNum = 12;
final int finalNum2 = 13;
const constStr = "hello";
const String constStr2 = "world";
final var finalNum3 = 14; // 报错,不能同时声明final和var
const var constStr3 = "wrong"; // 报错,不能同时声明const和var

final和const的区别。

1. final的变量只初始化一次,可以是编译时的常量,也可以不是。const必须是编译时的常量。

2. final只是在第一次运行的时候确定常量值,const必须指定常量值。比如:final可以是一个函数的计算结果,但是const不行。

3. const可以修饰值,final不可以。const的值必须是const, final可以不是。

ps: 编译时常量,是指在程序编译时就可以确定的值。比如:一个确定的数值,或者可以获得结果的数值表达式;一个确定的字符串等等。

final finalNum = 10; // 正确
final finalNum2 = 10 * finalNum; // 正确
const constNum = 10;
const constNUm2 = 10 * constNum; // 正确

// const声明必须是编译时常量
final finalDate = new DateTime.now(); // 正确
const constDate = new DateTime.now(); // 报错。不是一个常量表达式

var varNum = 12;
final finalVarNum = varNum; // 正确
const constVarNum = varNum; // 报错。不是一个常量表达式

const constConstNum = constNum; // 正确

// const修饰的值,必须是常量
final finalConst = const [varNum, 1, 2]; // 错误。不是一个常量表达式
final finalConst = const [constNum, 1, 2]; // 正确
const constList = const [constNum]; // 正确

PS: 其他的类型: list, map, rune, symbol将在另外两篇博客中,详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值