Dart编程语言从基础到进阶3

Dart编程语言从基础到进阶

数据类型从来都是一个语言的核心,同样在Dart中如果你不了解它的内置数据类型,那你后面也将寸步难行。所以这节我们重点来了解一下Dart的内置数据类型。

Dart的内置类型1

Dart中内置数据类型有:
Number
String
Boolean
List
Map
Set
Rune
Symbol
前面我们说过这里再强调一遍,在Dart中一切接对象,数据类型等更是对象,所以变量是可以在构造函数中进行初始化操作的。一些内置函数比如Map自带构造函数。
下面我们按照顺序一个一个来了解一下这些数据类型:

Number

也就是我们常说的数字类型,在Dart中它包括int和double两种,前者代表整数型后者代表浮点类型。却别两者的方法很简单,只要有小数点就是double没有就是int.
比如:
var a = 1;//a 会被推断为int

var b = 1.1;//b 会被推断为double
从 Dart 2.1 开始,必要的时候 int 字面量会自动转换成 double 类型。
double z = 1; // 相当于 double z = 1.0.
版本提示:在 2.1 之前,在 double 上下文中使用 int 字面量是错误的。以下是将字符串转换为数字的方法,反之亦然:
// String -> int
var one = int.parse(‘1’);
assert(one == 1);

// String -> double
var onePointOne = double.parse(‘1.1’);
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == ‘1’);

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == ‘3.14’);
int 特有的传统按位运算操作,移位(<<, >>),按位与(&)以及 按位或(|)。例如:
assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111
数字类型字面量是编译时常量。在算术表达式中,只要参与计算的因子是编译时常量,
那么算术表达式的结果也是编译时常量。
const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

String

字符串通过单引号或者双引号创建。
var s1 = ‘Single quotes work well for string literals.’;
var s2 = “Double quotes work just as well.”;
var s3 = ‘It’s easy to escape the string delimiter.’;
var s4 = “It’s even easier to use the other delimiter.”;
字符串可以通过 ${expression} 的方式内嵌表达式。如果表达式是一个标识符,则 {} 可以省略。在 Dart 中通过调用就对象的 toString() 方法来得到对象相应的字符串。
var s = ‘string interpolation’;

assert(‘Dart has s , w h i c h i s v e r y h a n d y . = = D a r t h a s s t r i n g i n t e r p o l a t i o n , + w h i c h i s v e r y h a n d y . ) ; a s s e r t ( T h a t d e s e r v e s a l l c a p s . + s, which is very handy.' == 'Dart has string interpolation, ' + 'which is very handy.'); assert('That deserves all caps. ' + ' {s.toUpperCase()} is very handy!’ ==
'That deserves all caps. ’ +
‘STRING INTERPOLATION is very handy!’);
提示:== 运算符用来测试两个对象是否相等。在字符串中,如果两个字符串包含了相同的编码序列,那么这两个字符串相等.可以使用 + 运算符来把多个字符串连接为一个,也可以把多个字面量字符串写在一起来实现字符串连接:
var s1 = 'String ’
‘concatenation’
" works even over line breaks.";
assert(s1 ==
'String concatenation works even over ’
‘line breaks.’);

var s2 = ‘The + operator ’ + ‘works, as well.’;
assert(s2 == ‘The + operator works, as well.’);
使用连续三个单引号或者三个双引号实现多行字符串对象的创建:
var s1 = ‘’’
You can create
multi-line strings like this one.
‘’’;

var s2 = “”“This is also a
multi-line string.”"";
使用 r 前缀,可以创建 “原始 raw” 字符串:
var s = r"In a raw string, even \n isn’t special.";
一个编译时常量的字面量字符串中,如果存在插值表达式,表达式内容也是编译时常量,那么该字符串依旧是编译时常量。插入的常量值类型可以是 null,数值,字符串或布尔值。
// const 类型数据
const aConstNum = 0;
const aConstBool = true;
const aConstString = ‘a constant string’;

// 非 const 类型数据
var aNum = 0;
var aBool = true;
var aString = ‘a string’;
const aConstList = [1, 2, 3];

const validConstString = ‘$aConstNum $aConstBool a C o n s t S t r i n g ; / / c o n s t / / c o n s t i n v a l i d C o n s t S t r i n g = aConstString'; //const 类型数据 // const invalidConstString = ' aNum $aBool $aString $aConstList’; //非 const 类型数据

Boolean

Dart 使用 bool 类型表示布尔值。Dart 只有字面量 true and false 是布尔类型, 这两个对象都是编译时常量。Dart 的类型安全意味着不能使if (nonbooleanValue) 或者assert (nonbooleanValue)。而是应该像下面这样,明确的进行值检查:

// 检查空字符串。
var fullName = ‘’;
assert(fullName.isEmpty);

// 检查 0 值。
var hitPoints = 0;
assert(hitPoints <= 0);

// 检查 null 值。
var unicorn;
assert(unicorn == null);

// 检查 NaN 。
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

List

几乎每种编程语言中最常见的集合可能是 array 或有序的对象集合。在 Dart 中的 Array 就是List对象, 通常称之为 List 。
Dart 中的 List 字面量非常像 JavaScript 中的 array 字面量。下面是一个 Dart List 的示例:
var list = [1, 2, 3];
提示: Dart 推断 list 的类型为 List 。 如果尝试将非整数对象添加到此 List 中, 则分析器或运行时会引发错误。
Lists 的下标索引从 0 开始,第一个元素的索引是 0。list.length - 1 是最后一个元素的索引。访问 List 的长度和元素与 JavaScript 中的用法一样:
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);
在 List 字面量之前添加 const 关键字,可以定义 List 类型的编译时常量:
var constantList = const [1, 2, 3];
// constantList[1] = 1; // 取消注释会引起错误。

Set

在 Dart 中 Set 是一个元素唯一且无需的集合。Dart 为 Set 提供了 Set 字面量和 Set 类型。
下面是通过字面量创建 Set 的一个简单示例:
var halogens = {‘fluorine’, ‘chlorine’, ‘bromine’, ‘iodine’, ‘astatine’};
Note: Dart 推断 halogens 类型为 Set 。如果尝试为它添加一个 错误类型的值,分析器或执行时会抛出错误。
要创建一个空集,使用前面带有类型参数的 {} ,或者将 {} 赋值给 Set 类型的变量:
var names = {};
// Set names = {}; // 这样也是可以的。
// var names = {}; // 这样会创建一个 Map ,而不是 Set 。
是 Set 还是 Map ? Map 字面量语法同 Set 字面量语法非常相似。 因为先有的 Map 字母量语法,所以 {} 默认是 Map 类型。 如果忘记在 {} 上注释类型或赋值到一个未声明类型的变量上, 那么 Dart 会创建一个类型为 Map<dynamic, dynamic> 的对象。
使用 add() 或 addAll() 为已有的 Set 添加元素:
var elements = {};
elements.add(‘fluorine’);
elements.addAll(halogens);
使用 .length 来获取 Set 中元素的个数:
var elements = {};
elements.add(‘fluorine’);
elements.addAll(halogens);
assert(elements.length == 5);
在 Set 字面量前增加 const ,来创建一个编译时 Set 常量:
final constantSet = const {
‘fluorine’,
‘chlorine’,
‘bromine’,
‘iodine’,
‘astatine’,
};
// constantSet.add(‘helium’); // Uncommenting this causes an error.

下节内容:Dart的内置类型2
结语:

最近在录制视频,到时候也会免费放在公众号中供大家学习交流使用。如果对您有用请关注,如果文中有错也欢迎指正。共同学习,共同进步。

欢迎关注公众号:计算机自学平台

原创文章 52 获赞 40 访问量 9万+

猜你喜欢

转载自blog.csdn.net/farley119/article/details/103179424