1
此文章来自 B站视频教程 传送门

介绍

  • Dart 致力于打造漂亮且高质量的跨屏体验

    • 针对客户端开发优化
    • 丰富而强大的框架
    • 令人愉悦且灵活的工具
  • 安装

    • 一般跟随框架安装,比如Flutter
    • 可通过DartPad 在线编写和运行代码

重要概念

  • 一切变量都是对象,包括数字、函数和null
  • 对象是类的实例,所有类都继承与Object
  • 强类型但支持类型推断
  • 如果不想指定具体类型可以使用 dynamic
  • 支持泛型,比如List<int> 或 List<dynamic>
  • 支持顶层函数、类方法、实例方法和嵌套函数

    • 顶层函数:例如:main就是顶层函数
    • 类方法:要通过类名来调用
    • 实例方法:要通过类的实例对象来调用
    • 嵌套函数:在函数内嵌套函数
  • 支持顶层变量、类变量、实例变量和局部变量

    • 类变量和实例变量同上
  • 以下划线( _ )开头的变量为私有,只能在库 (library)内部使用

    • 私有:对外不公开,不可使用
  • 标识符只能以字母或下划线开头,后面跟任意多个字母、数字或下划线字符

    • 标识符:变量名、函数名、类名、方法名...
  • 表达式在运行时可以求值,而语句不行
  • 代码问题分为 warning 和 error 两种,warning不会阻止程序运行,但 error 会
  • error 分为编译时错误和运行时错误两种,运行时错误会导致抛出异常

变量

  • 变量类型可以自动推断,或者显示指定
  • 未初始化的变量其值都为 null,包括数字
  • 如果某个变量的值在定义后不会再改变,那就声明未 final 或 const
  • final 和 const 变量只能赋值一次,但 const 变量的值需要在编译时就能确定,final 的值可以在运行的时候确定
  • final 和 const 变量必须在其定义时就完成初始化,因为他们只能赋值一次,如果在定义的时候不初始化,那么他么的值就永远为 null
  • const 变量的值必须为编译时常量,包括数字和字符串字面量、其他常量或算数运行结果
  • const 除了用来声明变量,也可用来声明值、也就是常值
  • 初始化 const 变量时可以省去值前面的 const,因为 const 变量的值肯定得是一个常值
  • 常值用来防止内容变化,常量用来避免变量寻值,final 常量用来提升代码安全性

内置对象

  • 数字 (num)

    • num 是 int 和 double 的基类
    • int 为 64 位整数,double 为 64 位浮点数
    • num 和 int 是 double 的基类
  • 字符串 (String)

    • 字符串是 UTF-16 码元 (Code Unit)序列,每个Unicode 字符映射为1个或2个码元
    • 字符串字面量可以使用单引号或双引号
    • 使用 ${expression} 来插入变量值,如果 expression 是个合法的标识符,则可以省去 {}
    • 使用毗连字符串常量或者 + 操作符来拼接字符串
    • 使用三重引号来定义多行字符串
    • 使用 r 前缀来声明原始字符串,其内不作字符转义
    • 只要内部插入的表达式为编译时常量,则字符串字面量为编译时常量
  • 布尔 (bool)

    • 只有两个值 true 和 false,都是编译时常量
    • 在需要布尔类型的地方必须使用布尔值
  • 列表 (List)

    • 列表就是其他语言里的数组,用来表示对象序列
    • 列表索引序号从 0 开始,直到 list.length - 1
    • 在列表字面量前使用 const 来声明常值
    • 使用 [] 操作符来操作列表元素
  • 哈希表 (Map)

    • 哈希表用来关联键和值,键和值可以是任意类型的对象,但键必须唯一
    • 使用 [] 操作符来操作哈希表的值
    • 在哈希表字面量前使用 const 来声明常值
  • 符文 (Rune)

    • Rune 是由 UTF-32 码点 (Code Point)组成的字符串,一个 Rune 字符对应一个 Unicode字符
    • 码点一般使用 4 个十六进制字符 uXXXX 来表示,如果超过4个,则需要使用 {}
    • 字符串 和 Rune 直接可互相转换

函数

  • 函数也是一种对象,类型为Function
  • 函数参数和返回值类型可以省略,以支持动态类型
  • 如果函数体只包含一个表达式,可使用箭头语法来定义
  • 可选参数

    • 可选命名参数使用{}来指定,并可使用注解 @required 标注为必须
    • 可选位置参数使用 [] 指定
    • 可选参数默认值使用 = 来指定,如为指定则默认值为null
  • 每个程序都应有个位于顶层的 main函数,它是程序入口
  • 函数可作为函数参数值,也可赋值给变量
  • 可定义匿名函数,一般作为函数参数值或赋值给变量
  • 变量作用域静态确定,也就是同代码布局,每对大括号定义一个作用域,嵌套大括号定义嵌套作用域
  • 闭包是一个能访问其外层作用域变量的函数,即便该函数在其他地方被调用
  • 如果函数没有指定返回值,则默认返回null,如果确实不想返回任何值,则可指定返回类型为void

关键字

9P80x4

基本数据类型

Dart的基本数据类型包括Number、String、Boolean、List、Set、Map、 Symbol、Runes。

Number

number类型为两类:

  • int:整数值不大于64位,具体取决于平台。在Dart VM上,值可以是-2 ^63到2 ^63 - 1,如果编译为JavaScript,允许值为-2^53 to 2^53 - 1。
  • double:64-bit (双精度) 浮点数,符合 IEEE 754 标准。

String

Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串:

var s1 = '单引号适用于字符串文字';
var s2 = "双引号同样有效";

可以在字符串中使用表达式,用法是: ${expression}。如果表达式是一个标识符,可以省略 {}。

var s = '乾坤大挪移';
assert('张无忌的$s' ==
       '张无忌的乾坤大挪移');

使用三个单引号或者三个双引号可以创建多行字符串对象:

var s1 = '''
第一行
第二行
''';

var s2 = """第一行
第二行""";

Boolean

Dart是强bool类型检查,只有true对象才被认为是true。

var name = '张无忌';
if (name) {
  print('明教教主');
}

上面的代码编译不能通过,因为name是一个字符串,而不是bool类型。

List

下面是一个List 的示例:

var list = [1, 2, 3];

List的第一个元素的索引是0,最后一个元素的索引是 list.length - 1 。

var list = [1, 2, 3, 4, 5, 6];
print(list.length);
print(list[list.length-1]);

Set

Dart中的Set是一组无序的集合。

 var hero = ['张无忌', '风清扬', '张三丰', '独孤求败', '萧峰'];

要创建一个空集,可以在{}前面带有类型参数:

var heros= <String> {};

使用add()或addAll()方法将条目添加到现有集中:

var heros = <String>{};
heros.add('石破天');
heros.addAll(hero);

Map

Map是一个键值对相关的对象,键和值可以是任何类型的对象,每个键都是唯一的,而一个值则可以出现多次。

var player= {
// Keys      Values
  '20' : '斯诺',
  '3': '艾弗森',
  '40' : '希尔',
  '8' : '麦基',
  '55' : '穆托姆博'
};

使用Map构造函数也可以实现同样的功能:

  var player = new Map();
  player['20'] = '斯诺';
  player['3'] = '艾弗森';
  player['40'] = '希尔';

杭州蘇小小
178 声望12 粉丝

我是一名 WEB前端 开发者不断在前端这条路上努力拼搏着。我喜欢代码的逻辑有序性,每一行代码都有其不同的作用,所有的代码加起来就可以让用户能愉快的体验我的产品。我喜欢研究,遇到难题我不退缩,我相信我可以...