简介

和所有的编程语言一样,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. 大白话透彻讲解 Promise 的使用,读完你就懂了

    一.为什么使用Promise? 我们知道 js 执行的时候,一次只能执行一个任务,它会阻塞其他任务.由于这个缺陷导致 js 的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以使用回调函数执行. ...

  2. 安装配置环境 CUDA以及CUDNN tensorflow pytorch pip安装 虚拟环境

    1.  在win10中利用Anaconda直接安装tensorflow-gpu 不需要另行安装cuda cudnn 但是不知道电脑会自动适配所需的版本吗,不过把电脑显卡驱动更新一下,就都也可以了吧. ...

  3. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  4. kubeadm 如何将节点加入集群

    kubeadm join 使用 token 过期之后(24小时过期),如何加入集群 一.重启生成新token # 创建新token kubeadm token create # 查看是否存在有效的 t ...

  5. p3c 插件,是怎么检查出你那屎山的代码?

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/RwzprbY2AhdgslY8tbVL-A 一.前言 你会对你用到都技术,好奇 ...

  6. Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式

    1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...

  7. c#中多线程间的同步

    目录 一.引入 二.Lock 三.Monitor 四.Interlocked 五.Semaphore 六.Event 七.Barrier 八.ReaderWriterLockSlim 九.Mutex ...

  8. T-SQL——关于表数据的复制插入

    目录 0. 复制表中一列插入到另外一列 1. 复制表结构和数据到自动创建的一张新表中--select into 2. 复制表中一些字段值插入到另外一张表中--insert into 3. 将存储过过程 ...

  9. JavaFx 监听剪切板实现(Kotlin)

    原文地址: JavaFx 监听剪切板实现(Kotlin) | Stars-One的杂货小窝 软件有个需求,想要实现监听剪切板的内容,若内容符合预期,则进行相关的操作,就可以免去用户手动粘贴的操作,提供 ...

  10. 使用python -m pip install 和 pip install 安装包有什么区别?

    如果去看源码的话,你会发现 pip 作为执行文件的入口点是 pip._internal.main. 另一方面,pip 作为模块运行时入口是 _main.py,而该模块也只是调用 pip.interna ...