简介

和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌握了这些内置类型才能够在使用dart语言的时候得心应手。

今天就给大家讲解一下dart语言的内置类型。

Null

在dart中用null来表示空。那么null和Null有什么关系呢?

Null是一个类,先看下Null的定义:

class Null {
factory Null._uninstantiable() {
throw UnsupportedError('class Null cannot be instantiated');
} external int get hashCode; /** Returns the string `"null"`. */
String toString() => "null";
}

可以看到Null类型的string表示就是null。而相应的null是一个关键字,其对应的就是Null类。

数字

dart中的数字对应的类是num,他有两个子类,分别是int和double。

int表示不大于64 bits的整数。因为dart可以运行在不同的平台中,所以不同平台表示的范围也是不同的。

在原生平台,比如android或者IOS平台,int的范围可以达到 -2^63 到 2^63 - 1。 但是在web环境中,可表示的范围是-2^53 到 2^53 - 1.

double相应的表示的是浮点类型。

对于数字来说,基本的运算操作符像是 +, -, / 和 *都是定义在num类中。当然还有其他一些常规的操作符。

如果需要更加复杂的运算,则可以使用dart:math库。

下面是几个数字使用的例子:

int age =18;
int number= 20;
double money = 10.1;

字符串

字符串是经常会使用的一种类型。dart中字符串对应的类是String。也可以直接用字面量表示如下:

var name ='jack';
var site ="www.flydean.com";

字符串可以用单引号也可以用双引号来表示。dart中字符串使用的是UTF-16编码。

dart中的字符串中,还可以带上变量值,他的格式是 ${expression}.

var age=10;
var words ='your age is ${age}!';

两个字符串可以用==来比较是否相等,字符比较的是对应的字符编码序列,如果字符编码序列相等,那么对应的字符串就相等。

字符串的连接可以使用+。

var hello ="hello " + "word";

还有一种创建字符串的方法是使用三个单引号或者三个双引号。

var string1= '''
this is a string!
'''; var string2 = """
this is string again!
""";

默认情况下string中的字符表示就是字符本身,如果要转换成其原始含义的话,则可以在字符串前面加上r:

var string3 =r'this is line one \n this is line two';

布尔值

布尔值在dart中用bool来表示。bool值只有两个字符串表示,分别是true和false。

因为dart是类型安全的,也就是说在需要使用bool类型的时候,不能用其他类型代替。

比如我们要判断字符串是否为空,可以这样判断:

var name='';
if(name.isEmpty){
do something
}

列表

dart中的列表用List来表示,当然也可以直接使用下面的字面量表示:

var list = [1, 2, 3];

列表的index从0开始,以length-1结束。

从dart 2.3开始,引入了扩展符...和可为空的扩展符...? ,扩展符可以用将一个已知的list展开成其对应的元素,从而可以方便的构建list的组合:

var list = [1, 2, 3];
var list2 = [0, ...list];

dart中提供一个很神奇的功能,就是可以在构建list的过程中使用if和for语句,来动态生成list中的元素:

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

或者:

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

set和map

dart中的集合用Set来表示。

set表示的是不重复的元素的集合,如下所示:

var names = {'jack', 'mark', 'max'};

dart中的映射用Map来表示。

Map的创建和set很类似,但是包含了key和value:

var students = {'jack':18, 'mark':19, 'max':20};

大家可以发现,set和map是很类似的,那么问题来了, 怎么表示一个空的set或者map呢?

因为set中的元素是单个的,而map中的元素是键值对,所以我们可以这样的表示:

var names = <String>{};
var gifts = Map<String, String>();

但是如果不指定类型,那么默认创建的就是一个map:

var map = {};

要获取map中的值,可以这样使用:

var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';

map和set都支持扩展符...和可为空扩展符...? , 同样也支持集合内的if和for操作。

本文已收录于 http://www.flydean.com/02-dart-buildin-type/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

dart系列之:dart语言中的内置类型的更多相关文章

  1. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还 ...

  2. Perl语言中一些内置变量等,$x、qw、cmp、eq、ne等

    转载 Perl语言中一些内置变量等,$x.qw.cmp.eq.ne等 字母 符号 释义 eq  = = equal(等于) ne != not equal(不等于) cmp 比较 qq  " ...

  3. Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型 1.返回顶部 1. 整型数值类型(C# 参考) 2019/10/22 “整型数值类型”是“简单类型”的 ...

  4. Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:值类型的功能

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:值类型的功能 1.返回顶部 1. 值类型(C# 参考) 2018/11/26 有两种值类型: 结构 枚举 值类型的主 ...

  5. dart系列之:dart类中的泛型

    目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在集合 ...

  6. dart系列之:dart代码最佳实践

    目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的便利 ...

  7. C++ x86程序与x64程序中,各种内置类型的大小比较

    代码: #include <iostream> #include <cstdio> #include <list> #include <string> ...

  8. dart系列之:dart语言中的变量

    目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...

  9. dart系列之:dart语言中的函数

    目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函数有 ...

随机推荐

  1. phpQuery

    以下资料均来自官方文档,官方文档地址:https://code.google.com/archive/p/phpquery/wikis 基础 示例 phpQuery::newDocumentFileX ...

  2. SQL连接查询的执行顺序?

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1)from (2)on (3)join (4)where (5)group by(开始使用sele ...

  3. kubeadm 命令简介

    kubeadm 命令 kubeadm init 启动一个kubernetes主节点 kubeadm join 启动一个kubernetes工作节点并加入到集群中 kubeadm upgrade 更新一 ...

  4. Redis之品鉴之旅(七)

    分布式锁 1)阻塞锁: 尝试在redis中创建一个字符串结构缓存,方法传入的key,value为锁的过期时间timeout的时间戳. 若redis中没有这个key,则创建成功(即抢到锁),然后立即返回 ...

  5. Monte-carlo-simulation

    https://towardsdatascience.com/how-to-use-monte-carlo-simulation-to-help-decision-making-a0a164bc861 ...

  6. 学习Tomcat(六)之类加载器

    通过前面的文章我们知道,Tomcat的请求最终都会交给用户配置的servlet实例来处理.Servlet类是配置在配置文件中的,这就需要类加载器对Servlet类进行加载.Tomcat容器自定义了类加 ...

  7. CSS 奇技淫巧 | 妙用 drop-shadow 实现线条光影效果

    本文将介绍一种利用 CSS 滤镜 filter 的 drop-shadow(),实现对 HTML 元素及 SVG 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中.通过本文,你 ...

  8. 我惊了!CompletableFuture居然有性能问题!

    你好呀,我是歪歪. 国庆的时候闲来无事,就随手写了一点之前说的比赛的代码,目标就是保住前 100 混个大赛的文化衫就行了. 现在还混在前 50 的队伍里面,稳的一比. 其实我觉得大家做柔性负载均衡那题 ...

  9. 开启Nginx代理HTTPS功能

    1.首先查看是否已经安装SSL openssl version -a 2.生成SSL证书 在nginx目录下创建ssl文件夹 cd /etc/pki mkdir nginx cd nginx 生成20 ...

  10. 题解 「2017 山东一轮集训 Day5」苹果树

    题目传送门 题目大意 给出一个 \(n\) 个点的图,每个点都有一个权值 \(f_i\) ,如果 \(f_i=-1\) 表示 \(i\) 这个点是坏的.定义一个点是有用的当且仅当它不是坏的,并且它连的 ...