Dart In Action -Dar的基本数据类型(一)
写在前面
本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。
Flutter教程在这里
数字
Dart的数字一共分为2类:
-
int
整型不大于64位,具体取决于平台。 在Dart VM上,值可以是-263到263 - 1.编译为JavaScript的Dart使用JavaScript 数字,允许从-253到253 - 1的值。 -
double
64位(双精度)浮点数,由IEEE 754标准规定。
int
和double都是num
的子类型。 num
类型包括基本运算符,如+, - ,/和*,也是你可以找到abs()
,ceil()
和floor()
以及其他方法的地方。 (按位运算符,如>>
,在int
类中有定义。)如果num及其子类没有您要想要内容,那dart:math库可能有您想要的。
整数是没有小数点的数字。 以下是定义整数文字的一些示例:
int x = 1; int hex = 0xDEADBEEF;
如果数字包含小数,则为双精度数。 以下是定义双精度数字的一些示例:
double y = 1.1; double exponents = 1.42e5;
以下是将字符串转换为数字的方法,反之亦然:
// 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
类型指定传统的按位移位(<<,>>),AND(&)和OR(|)运算符。 例如:
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;
字符串
Dart字符串是一系列UTF-16代码单元。 您可以使用单引号或双引号来创建字符串:
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, 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, not even \n gets special treatment.';
有关如何在字符串中表示Unicode字符的详细信息,请参阅Runes。
文字字符串是编译时常量,只要任何插值表达式是一个编译时常量,其值为null或数值,字符串或布尔值。
// 这些在const String可以使用. const aConstNum = 0; const aConstBool = true; const aConstString = 'a constant string'; // 这些在const String中不能使用. var aNum = 0; var aBool = true; var aString = 'a string'; const aConstList = [1, 2, 3]; const validConstString = '$aConstNum $aConstBool $aConstString'; // const invalidConstString = '$aNum $aBool $aString $aConstList';
有关使用字符串的更多信息,请参阅字符串和正则表达式。
布尔值
为了表示布尔值,Dart有一个名为bool
的类型。 只有两个对象具有bool
类型: true
和false
,它们都是编译时常量。
Dart的类型安全意味着您不能使用if(nonbooleanValue)
或assert(nonbooleanValue)
等代码。 相反,明确检查值,如下所示:
// Check for an empty string. var fullName = ''; assert(fullName.isEmpty); // Check for zero. var hitPoints = 0; assert(hitPoints <= 0); // Check for null. var unicorn; assert(unicorn == null); // Check for NaN. var iMeantToDoThis = 0 / 0; assert(iMeantToDoThis.isNaN);
列表
也许几乎每种编程语言中最常见的集合是数组或有序的对象组。 在Dart中,数组是List 对象,因此大多数人只是将它们称为列表。
Dart列表文字看起来像JavaScript
数组文字。 这是一个简单的Dart List:
var list = [1, 2, 3];
注意:分析器推断列表的类型为List <int>。 如果尝试将非整数对象添加到此列表,则分析器或运行时会引发错误。 有关更多信息,请阅读类型推断。
List使用从零开始的索引,其中0是第一个元素的索引,list.length - 1
是最后一个元素的索引。 您可以像在JavaScript
中一样获取列表的长度并引用列表元素:
var list = [1, 2, 3]; assert(list.length == 3); assert(list[1] == 2); list[1] = 1; assert(list[1] == 1);
要创建一个编译时常量的列表,请在列表文字之前添加const
:
var constantList = const [1, 2, 3]; // constantList[1] = 1; // 取消注释会导致错误。
List类型有许多方便的方法来操作列表。 有关列表的更多信息,请参阅泛型和集合。
映射
通常,映射是一个有键和值的对象。 键和值都可以是任何类型的对象。 每个键只出现一次,但您可以多次使用相同的值。 Dart的Map支持由映射文字和Map。
这里有几个简单的Dart映射,使用map文字创建:
var gifts = { // Key: Value 'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings' }; var nobleGases = { 2: 'helium', 10: 'neon', 18: 'argon', };
注意:分析器推断
gifts
的类型为Map <String,String>
,而nobleGases
的类型为Map <int,String>。 如果您尝试将错误类型的值添加到任一映射,则分析器或运行时会引发错误。 有关更多信息,请阅读类型推断。
您可以使用Map构造函数创建相同的对象:
var gifts = Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings'; var nobleGases = Map(); nobleGases[2] = 'helium'; nobleGases[10] = 'neon'; nobleGases[18] = 'argon';
注意:您可能希望看到
new Map()
而不仅仅是Map()
。 从Dart 2开始,new
关键字是可选的。 有关详细信息,请参阅使用构造函数。
像在JavaScript
中一样,将新的键值对添加到现有Map:
var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; // 新增一个键值对
以与在JavaScript中相同的方式从Map中检索值:
var gifts = {'first': 'partridge'}; assert(gifts['first'] == 'partridge');
如果您在Map中查找一个不存的键,则会返回null
:
var gifts = {'first': 'partridge'}; assert(gifts['fifth'] == null);
使用.length
获取Map
中键值对的数量:
var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; assert(gifts.length == 2);
要创建一个为编译时常量的Map,请在map之前添加const
:
final constantMap = const { 2: 'helium', 10: 'neon', 18: 'argon', }; // constantMap[2] = 'Helium'; // 取消注释会导致错误。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python爬虫+颜值打分,5000+图片找到你的Mrs. Right
一见钟情钟的不是情,是脸 日久生情生的不是脸,是情 项目简介 本项目利用Python爬虫和百度人脸识别API,针对简书交友专栏,爬取用户照片(侵删),并进行打分。 本项目包括以下内容: 图片爬虫 人脸识别API使用 颜值打分并进行文件归类 图片爬虫 现在各大交友网站都会有一些用户会爆照,本文爬取简书交友专栏(https://www.jianshu.com/c/bd38bd199ec6)的所有帖子,并进入详细页,获取所有图片并下载到本地。 代码 import requests from lxml import etree import time headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' } def get_url(url): res = requests.get(url,headers=headers) html = etree.HTML(res.t...
- 下一篇
【译Py】Awesome Asyncio 中文版
Awesome-Asyncio-CN Awesome-Asyncio-CN 原文地址:Awesome-asyncio 译者:陈键冬 校译:呆鸟 Python Asyncio 精选资源列表,囊括了网络框架,库,软件等资源。 Awesome-asyncio 是 Timo Furrer 发起并维护的 Python Asyncio 资源列表。本项目是其中文版,在这里,收集了大量的 Asyncio 的最棒、最新的资源,供大家探索 Python 异步编程世界。 Python 3.4 引入了 Asyncio 模块作为标准库,通过协程、多路 I/O 访问 Socket 和其他资源来编写单线程并发代码,并在网络客户端与服务器上运行。Asyncio 内置了对异步 I/O 的支持,其编程模型类似于消息循环,从 Asyncio 模块可以直接获取 EventLoop 引用,再把需要执行的协程放到 EventLoop 中执行,就实现了异步 I/O。Asyncio 是由 Python 之父 Guido 领导的项目,该项目被命名为 Tulip(郁金香)。 Asyncio 并不是新出现的黑科技,一些社区有名的第三库如 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群