Numbers

Dart 支持两种 Number 类型:

int

整数值;长度不超过 64 位,具体取值范围依赖于不同的平台。
在 DartVM 上其取值位于 -263 至 263 - 1 之间。
在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。

double

64 位的双精度浮点数字,且符合 IEEE 754 标准。

int 和 double 都是 num 的子类。 num 中定义了一些基本的运算符比如 +、-、*、/ 等,还定义了 abs()、ceil() 和 floor() 等方法(位运算符,比如 >> 定义在 int 中)。

示例

整数是不带小数点的数字,下面是一些定义整数字面量的例子:

var x = 1;
var hex = 0xDEADBEEF;

如果一个数字包含了小数点,那么它就是浮点型的。下面是一些定义浮点数字面量的例子:

var y = 1.1;
var exponents = 1.42e5;

还可以将变量声明为 num。如果这样做,变量可以同时具有整数和双精度值。

num x = 1;
x += 2.5

字符串和数字转换示例

// 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');

位运算

整型支持传统的位移操作,比如移位(<<、>> 和 >>>)、补码 (~)、按位与 (&)、按位或 (|) 以及按位异或 (^),例如:

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000

字符串

Dart 字符串(String 对象)包含了 UTF-16 编码的字符序列。可以使用单引号或者双引号来创建字符串:

var s1 = '使用单引号创建字符串字面量。';
var s2 = "双引号也可以用于创建字符串字面量。";
var s3 = '使用单引号创建字符串时可以使用斜杠来转义那些与单引号冲突的字符串:\'。';
var s4 = "而在双引号中则不需要使用转义与单引号冲突的字符串:'";

字符串模板

在字符串中,以 ${表达式} 的形式使用表达式,如果表达式是一个标识符,可以省略掉 {}。如果表达式的结果为一个对象,则 Dart 会调用该对象的 toString 方法来获取一个字符串。

var s = '字符串插值';assert('Dart 有$s,使用起来非常方便。' == 'Dart 有字符串插值,使用起来非常方便。');
assert('使用${s.substring(3,5)}表达式也非常方便' == '使用插值表达式也非常方便。');

创建多行字符串

使用三个单引号或者三个双引号也能创建多行字符串

var s1 = '''
你可以像这样创建多行字符串。
''';var s2 = """这也是一个多行字符串。""";

不转义直接输出

在字符串前加上 r 作为前缀创建 “raw” 字符串(即不会被做任何处理(比如转义)的字符串):

var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。';

布尔类型

Dart 使用 bool 关键字表示布尔类型,布尔类型只有两个对象 true 和 false,两者都是编译时常量。

Dart 的类型安全不允许你使用类似 if (nonbooleanValue) 或者 assert (nonbooleanValue) 这样的代码检查布尔值。相反,你应该总是显示地检查布尔值,比如像下面的代码这样:

// 检查是否为空字符串
var fullName = '';
assert(fullName.isEmpty);// 检查是否小于0
var hitPoints = 0;
assert(hitPoints <= 0);// 检查对象是否为空
var unicorn;
assert(unicorn == null);// 检查是否为NaN
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

List

数组 (Array) 是几乎所有编程语言中最常见的集合类型,在 Dart 中数组由 List 对象表示。通常称之为 List。

Dart 中的列表字面量是由逗号分隔的一串表达式或值并以方括号 ([]) 包裹而组成的。下面是一个 Dart List 的示例:

var list = [1, 2, 3];

这里 Dart 推断出 list 的类型为 List,如果往该数组中添加一个非 int 类型的对象则会报错。

你可以在 Dart 的集合类型的最后一个项目后添加逗号。这个尾随逗号并不会影响集合,但它能有效避免「复制粘贴」的错误。

var list = ['Car','Boat','Plane',
];

List 的下标索引从 0 开始,第一个元素的下标为 0,最后一个元素的下标为 list.length - 1。
你可以像 JavaScript 中的用法那样获取 Dart 中 List 的长度以及元素:

var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);list[1] = 1;
assert(list[1] == 1);

在 List 字面量前添加 const 关键字会创建一个编译时常量:

var constantList = const [1, 2, 3];
// constantList[1] = 1; // 这样操作会报错

Dart 在 2.3 引入了 扩展操作符(…)和 空感知扩展操作符(…?),它们提供了一种将多个元素插入集合的简洁方法。

例如,你可以使用扩展操作符(…)将一个 List 中的所有元素插入到另一个 List 中:

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(…?)来避免产生异常:

var list2 = [0, ...?list];
assert(list2.length == 1);

Dart 还同时引入了 集合中的 if 和 集合中的 for 操作,在构建集合时,可以使用条件判断 (if) 和循环 (for)。

下面示例是使用 集合中的 if 来创建一个 List 的示例,它可能包含 3 个或 4 个元素:

var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];

下面是使用 集合中的 for 将列表中的元素修改后添加到另一个列表中的示例:

var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');

Sets

在 Dart 中,set 是一组特定元素的无序集合。 Dart 支持的集合由集合的字面量和 Set 类提供。

下面是使用 Set 字面量来创建一个 Set 集合的方法:

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

Dart 推断 halogens 变量是一个 Set 类型的集合,如果往该 Set 中添加类型不正确的对象则会报错。

可以使用在 {} 前加上类型参数的方式创建一个空的 Set,或者将 {} 赋值给一个 Set 类型的变量:

var names = <String>{};
// var names = {}; // 如果直接声明{}的话Dart会将他当成Map

Set 还是 map? Map 字面量语法相似于 Set 字面量语法。因为先有的 Map 字面量语法,所以 {} 默认是 Map 类型。如果忘记在 {} 上注释类型或赋值到一个未声明类型的变量上,那么 Dart 会创建一个类型为 Map<dynamic, dynamic> 的对象。

使用 add() 方法或 addAll() 方法向已存在的 Set 中添加项目:

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

使用 .length 可以获取 Set 中元素的数量:

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);

可以在 Set 变量前添加 const 关键字创建一个 Set 编译时常量:

final constantSet = const {'fluorine','chlorine','bromine','iodine','astatine',
};

从 Dart 2.3 开始,Set 可以像 List 一样支持使用扩展操作符(… 和 …?)以及 Collection if 和 for 操作。

Map

通常来说,Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任何类型的对象。每个 键 只能出现一次但是 值 可以重复出现多次。 Dart 中 Map 提供了 Map 字面量以及 Map 类型两种形式的 Map。

下面是一对使用 Map 字面量创建 Map 的例子:

var gifts = {// Key:    Value'first': 'partridge','second': 'turtledoves','fifth': 'golden rings'
};var nobleGases = {2: 'helium',10: 'neon',18: 'argon',
};

Dart 将 gifts 变量的类型推断为 Map<String, String>,而将 nobleGases 的类型推断为 Map<int, String>。如果你向这两个 Map 对象中添加不正确的类型值,将导致运行时异常。

你也可以使用 Map 的构造器创建 Map:

var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

从一个 Map 中获取一个值:
如果检索的 Key 不存在于 Map 中则会返回一个 null

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

Map 可以像 List 一样支持使用扩展操作符(… 和 …?)以及集合的 if 和 for 操作。

Dart学习日记-基础类型相关推荐

  1. 学习Typescript1(基础类型)

    供自己学习之用,原文链接:   学习TypeScrip1(基础类型)_小满zs的博客-CSDN博客 TS是JS的超集,所以JS基础的类型都包含在内. 起步安装: npm install typescr ...

  2. ts学习笔记 -- 基础类型

    基础类型 1.布尔值 最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boolean(其它语言中也一样). let isDone: boolean ...

  3. SpringMvc学习日记-基础知识

    一.域对象传值 1.1.Request域对象 给Request域传值有多种方式,具体如下: // Servlet原生Api方式@RequestMapping("/testRequestByS ...

  4. java求2到100内的素数_java学习日记-基础-列出2~100内的素数

    素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public classSushu {publi ...

  5. Hibernate ORM框架学习日记基础篇-1

    一.简介 Hibernate是轻量级Java EE应用的持久层解决方案,不仅管理Java类库到数据库表的映射,还提供数据查询和获取数据的 方法,它完成对象模型和基于SQL的关系模型的映射关系,使得开发 ...

  6. Python学习日记-day1基础篇 字符 输出 注释

    Python学习日记-day1基础篇 字符 输出 注释 by北栀一刺 # -*- coding: utf-8 -*- """ Spyder EditorThis is a ...

  7. 210学习日记(18)_ARM基础知识

    210学习日记(18) --ARM基础知识 注意: 以下大部分类容都来自网上现成的(直接拷贝过来的,然后经整理)!!!! 问1:ARM处理器工作模式有几种?各种工作模式下分别有什么特点? 答1:ARM ...

  8. 10.16 my学习日记 (XPath的基础语法,lxml库的应用)

    10.16 my学习日记(XPath的基础语法,lxml库的应用) XPath的基础语法 XPath查找标签 XPath谓语 lxml库在爬虫中的应用 etree库etree_Element对象 使用 ...

  9. 托攻击检测基础知识-----WZW托攻击学习日记(一)

    ( 注:开始写这个学习日记的目的,有三个:一,检测自己学习的质量:二,与人交流,如果学习中出现什么错误欢迎指正:三,提供即将或以后想要学习相关知识的同志一丢丢帮助,也给自己的复习提供资料. 再注:本人 ...

最新文章

  1. 如何实现每个周期4个FLOP的理论最大值?
  2. python循环中append_[Python]list.append()在for循环中每次添加的都是最后的一个元素
  3. 把女友升级为老婆的时候发生的BUG
  4. 虚拟化笔记05 OpenFiler configuration
  5. 龙书啃不动?老司机带你从零入门编译原理,开发编译器
  6. Docker最全教程之使用.NET Core推送钉钉消息(二十)
  7. ado filter 多条记录_注意!武汉江南中心绿道武九线综合管廊工程开工,青山区多条道路通行规则有变...
  8. vue中如何调取api_vue-router在history模式下如何调用api?
  9. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld...
  10. 蓝桥杯 ADV-206 算法提高 不大的数
  11. 牛顿(Newton)插值及其MATLAB程序
  12. FCN数据预处理(code)
  13. TeeChart的坐标轴
  14. iOS开发UI篇—UIScrollView控件实现图片缩放功能
  15. 面向对象语言-反射机制
  16. Mathtype在word中编辑公式时变成英文
  17. eventscheduler mysql_Mysql 中的事件 事件调度器(Event Scheduler)
  18. 基于ArcGIS Pro 的AI地图配色工具
  19. Normal模式下ASM中的空间参数解析
  20. anaconda安装后打不开,卡在loading application

热门文章

  1. 关于路由的一点理解,还有编址
  2. 高性能 Java 持久化的 14 个技巧
  3. unity打出apk包在模拟器上运行一段时间后卡顿卡死
  4. 京东高层频繁换血:铁打的东哥,流水的高管?
  5. Java毕设项目家校通管理系统(java+VUE+Mybatis+Maven+Mysql)
  6. java.io.IOException: offset 0相关问题研究
  7. PBI中使用SVG自定义折线缩略图
  8. 微信小程序RSA加密与 Java RSA加密结果相同
  9. 程序员三千公积金感叹:凭什么羡慕公务员,我工资是公务员的2倍
  10. STM32学习+步科组态屏