Dart语言是使用Flutter框架开发必备的语言,Flutter是一个跨平台的框架,一套代码就可以完美编译成安卓和ios两个平台的移动应用,适配也很不错,最近谷歌又新推出的Flutter web,也可以用Dart代码去完成Web开发了(Futter web beta版)。Dart语言很友好,和Java很类似,也很像react,JavaScript,所以学习成本也是很低的。所以这也是我推荐学习Dart语言的一个原因。由于内容较多,接下来我会用多篇文章带领大家快速学习Dart语言的关键知识点。作者写文章不容易,觉得好看的话,点一下文末的“关注”,支持一下吧,谢谢大家。
Dart注释
Dart的注释分为3种:单行注释、多行注释、文档注释。
例如:// todo:待完成
例如:/* todo:待完成 */
3、文档注释以///或者/**开头。可以通过dartdoc命令导出文档。
文档注释的使用,例如:/// todo:待完成
文档的导出如图所示:
![911e34cd578dd9d2c69e7c794e7a774a.png](https://i-blog.csdnimg.cn/blog_migrate/5819ce56943d87f62062ae7553e24735.jpeg)
导出的结果在我的工程根路径的/doc/api/文件夹里面,如图所示:
![6de567e5603ab31424b302ef2e47e3f6.png](https://i-blog.csdnimg.cn/blog_migrate/ce28809e618f9170e8803db768456046.jpeg)
然后浏览器打开index.html就可以看到文档了。如图所示:
![9c9731af778770c8085724afb06a05ea.png](https://i-blog.csdnimg.cn/blog_migrate/9ad549ca29777190b6f7cf68a0de5f36.jpeg)
关键字(60个)
5个上下文关键字(仅在特定位置具有含义。它们在任何地方都是有效的标识符)
![350be6d82ce61095dbb5fd0fa15e6dbe.png](https://i-blog.csdnimg.cn/blog_migrate/6d3639c7fefbbae7cea9e3453cbde8c3.jpeg)
其中内置标志符有:(20个)
![753d96533f14bd9b2f1720bfe9ec636b.png](https://i-blog.csdnimg.cn/blog_migrate/b25d78da2ba864173e24356f9c937a1e.jpeg)
Dart新增的,有限的保留字,支持异步功能的关键字有:(2个)33个保留字(不能使用保留字作为标识符)
![71bd84794ebbcb9c21d97ca8b17a5f69.png](https://i-blog.csdnimg.cn/blog_migrate/ef94acc1f71fcc14f67d3d661604468c.jpeg)
跟java相比,Dart特有的关键字有:(27个)
![37902e20df0de0c433e0fd35f9805e00.png](https://i-blog.csdnimg.cn/blog_migrate/b65a531864fcd7a4e18f9566f26eb883.jpeg)
变量与常量
(一)变量的声明,可以使用 var、Object 或 dynamic 关键字。
创建变量并初始化变量实例:
变量存储引用。
- 1) 使用Object或dynamic关键字
调用的变量name包含对String值为“张三” 的对象的引用。
name推断变量的类型是String,但可以通过指定它来更改该类型。
如果对象不限于单一类型(没有明确的类型),请使用Object或dynamic关键字
- 2) 显式声明将被推断的类型
比如String,int等。
这个类型有很多,具体在下文有介绍。
(二)默认值
未初始化的变量的初始值为null(包括数字),因此数字、字符串都可以调用各种方法。
(三)Final 和 Const的用法
如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。
一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)
final的顶级或类变量在第一次使用时被初始化。
- 1、被final或者const修饰的变量,变量类型可以省略。
- 2、被 final 或 const 修饰的变量无法再去修改其值。
- 3、注意:flnal 或者 const 不能和 var 同时使用
- 4、常量如果是类级别的,请使用 static const
- 5、常量的运算
- 6、const关键字不只是声明常数变量。您也可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以有一个常量值。
- 7、只要任何插值表达式是一个计算结果为null或数字,字符串或布尔值的编译时常量,那么文字字符串就是编译时常量。(关于$表达式和不同的数据类型后面会讲解。)
数据类型
Dart支持以下特殊类型:
numbers 数字
strings 字符串
booleans 布尔
lists list集合(也称为数组)
maps map集合
runes 字符(用于在字符串中表示Unicode字符)
(一)num数字类型
num是数字类型的父类,有两个子类 int 和 double。
num类型包括基本的运算符,如+,-,/和*,位运算符,如>>,在int类中定义。如果num和它的子类没有你要找的东西,math库可能会找到。比如你会发现abs(),ceil()和floor()等方法。
(1)int类型
int表示整数,int默认是64位二进制补码整数,int的取值不大于64位,具体取决于平台。编译为JavaScript时,整数仅限于valus,可以用双精度浮点值精确表示。可用的整数值包括-2^53和2^53之间的所有整数,以及一些幅度较大的整数。这包括一些大于2^63的整数。因此,在编译为JavaScript的Dart VM和Dart代码之间,int类中的运算符和方法的行为有时会有所不同。例如,当编译为JavaScript时,按位运算符将其操作数截断为32位整数。
示例如下:
判断一个int值需要多少bit(位),可以使用bitLength,例如:
(2)double类型
Dart的double是IEEE 754标准中规定的64位浮点数。double的最大值是:1.7976931348623157e+308,double类里面有一个常量maxFinite,我们通过语句print(double. maxFinite)可以得到double的最大值。
如果一个数字包含一个小数,那么它就是一个double类型。示例如下:
(3)Dart2.1里面新增特性,当double的值为int值时,int自动转成double。
例如:double test = 12;//打印结果是12.0
(4)Dart2.1,int也有api转成double。
例如:
(5)Dart2.1,double也有api转成int,会把小数点后面的全部去掉。
例如:
(二)String字符串类型
Dart里面的String是一系列 UTF-16代码单元。
(1)您可以使用单引号或双引号来创建一个字符串。
(2)单引号或者双引号里面嵌套使用引号。
单引号里面嵌套单引号,或者//双引号里面嵌套双引号,必须在前面加反斜杠。
(3)多个字符串相邻中间的空格问题:
除了单引号嵌套单引号或者双引号嵌套双引号不允许出现空串之外,其余的几种情况都是可以运行的。
示例如下:
单引号里面有双引号,混合使用运行正常
双引号里面有单引号,混合使用运行正常
(4)您可以使用相邻字符串文字或+ 运算符连接字符串:
直接把相邻字符串写在一起,就可以连接字符串了。
用+把相邻字符串连接起来。
使用单引号或双引号的三引号:
print(connectionStr3)输出结果如下:
print(connectionStr4)的输出结果如下:
(5)关于转义符号的使用
声明raw字符串(前缀为r),在字符串前加字符r,或者在前面再加一个,
可以避免“”的转义作用,在正则表达式里特别有用。
举例如下:
(6)使用`$`可以获得字符串中的内容,使用`${表达式}`也可以将表达式的值放入字符串中。使用`${表达式}`时可以使用字符串拼接,也可以使用`String`类或者`Object`里面的某些方法获得相关字符串属性。
1、使用$+字符串
2、使用$+字符串,以及字符串拼接
3、这里使用了字符串的拼接,以及使用了String类里面的toUpperCase()函数,把字母全部变成大写。
注:==操作符测试两个对象是否相等。assert是断言,如果条件为true,继续进行,否则抛出异常,中端操作。
(三)bool布尔类型
Dart表示布尔值的类型叫做bool,它有两个值,分别是:true和false,它们都是编译时常量。
Dart使用的是显式的检查值,检查值的类型,如下所示:
assert 是Dart语言里的的断言函数,仅在Debug模式下有效。
在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)。
(四)list集合,也成为数组
在Dart中,数组是List对象,因此大多数人只是将它们称为List。
以下是一个简单的Dart的List:
创建一个int类型的list
要创建一个编译时常量const的list,示例如下:
注意事项:
1.可以直接打印list包括list的元素,list也是一个对象。但是java必须遍历才能打印list,java若直接打印list,结果是地址值。
2.和java一样list里面的元素必须保持类型一致,不一致就会报错。
3.和java一样list的角标从0开始。
Dart的list集合给我们提供了很多api,示例如下,api太多就不逐个展示了:
![7c2c7140edddfaf7242d0fa50aef1f6c.png](https://i-blog.csdnimg.cn/blog_migrate/df40f5c4e62e58b23d68ff82cc72d05f.jpeg)
(五)map集合
Dart中的map是将键和值相关联的对象。键和值都可以是任何类型的对象。每个键只出现一次,但您可以多次使用相同的值。
(1)创建方式:
- 1. 直接声明,用{}表示,里面写key和value,每组键值对中间用逗号隔开。
- 2. 先声明,再去赋值。
- 3. 要创建一个编译时常量const的map,请在map文字之前添加const:
(2)添加元素。格式: 变量名[key] = value,其中key可以是不同类型。
(3)修改元素。格式:变量名[key] = value
例如:把key为first的元素对应的value改成 alibaba
(4)查询元素
(5)删除元素.可以使用map的remove或者clear方法。
(6)关于map集合的小结:
(六)runes 字符(用于在字符串中表示Unicode字符)
Unicode为世界上所有的书写系统中使用的每个字母,数字和符号定义了唯一的数值。
Dart字符串是UTF-16代码单元的序列,所以在字符串中表达32位Unicode值需要特殊的语法。
Unicode代码点的常用方法是甥塘塘,其中XXXX是一个4位十六进制值。
例如,心形字符()是♥。要指定多于或少于4个十六进制数字,请将该值放在大括号中。例如,笑的表情符号是u{1f600}。
String类有几个属性可以用来提取符文信息。codeUnitAt和codeUnit属性返回16位代码单元。
以下示例说明了符文,16位代码单元和32位代码点之间的关系。
好了今天就写到这儿,喜欢就点关注,点赞吧,谢谢了。