在之前把环境折腾好了之后,我们开始打基础功,先把 dart 学好。
dart 这个语言还是比较奇怪的,之前根本没听过(可能是我孤陋寡闻了),据说有人问 flutter 开发者,为什么使用 dart 语言。开发者回答说:”dart 开发组就在我们隔壁,所以我们决定使用 dart” 😭
不过没关系,所有的语言思想都差不多,有经验的入门还是比较简单的。开始进入正题吧~
关于后面 dart ,代码可以在 dartPad 上运行
基本概念
- 在 dart 中,所有的东西都是对象,无论是变量,数字或函数,所有的对象都是类的实例,所有的对象都从 Object 类继承
- 尽管 dart 是强类型的,但类型申明是可选的,因为 Dart 可以推断出类型,如果要明确的不适用任何类型,请使用特殊类型 dynamic
- dart 支持顶级变量的定义
- dart 没有 public,protected,private 的概念,如果函数或变量以下划线
_
开头,则这个函数或变量属于这个包私有
变量与常量
void main() {
// 变量申明
var name = 'enda';
// 变量默认值为 null
int lineCount;
print(lineCount); // null
// 可以在定义变量时指定变量的类型,通过指定变量类型,可以减少编译和运行时间
String name = 'enda';
// 常量定义 常量定义就不能修改
final firstName = 'E';
// 或者申明类型的常量定义
final int age = 20;
const lastName = 'D';
}
数据类型
dart 内置了几种常见的数据类型
- numbers
- strings
- booleans
- lists (数组)
- maps
- runes (用于在字符串中表示 Unicode 字符)
- symbols
number 类型
number 类型分为 int 和 double
int 的取值范围为 -253 to 253 - 1
double 为 64 位长度的浮点类型
number 常见的操作方位包括: +
,-
,*
,/
以及位移 >>
int 类型转换
void main() {
// 字符串转 int
var one = int.parse('1');
assert(one == 1);
// 字符串转浮点
var onePointOne = double.parse('1.1');
// int 转字符串
String oneAsString = 1.toString();
// double 转字符串
String piAsString = 3.14159.toStringAsFixed(2);
}
String 类型
可以使用单引号或双引号创建字符串
字符串定义
var str1 = '单引号定义';
var str2 = "双引号定义";
var str3 = "转义 \'s ";
字符串连接
字符串连接,使用 +
操作符
// 字符串连接可以使用 + 号
var str4 = str1 +'-'+ str2;
多行字符串
使用 """
或 '''
来定义多行字符串
// 多行字符串
var str5 = '''
多行字符串的定义
简单吧
''';
raw 字符串
使用 r
来定义
// 使用 r 修饰,表明是 raw 类型的字符串
var str6 = r"In a raw string, even \n s";
Boolean 类型
bool 类型只有两个值 true
和 false
dart 对 bool 值的检查是强类型检查,所以不能和 php 一样去依赖强转检查
我们可以写成下面这样
// 检查是否为空字符串
var fullName = '';
assert(fullName.isEmpty);
// 检查是否为 0
var hitPoints = 0;
assert(hitPoints <= 0);
// 检查是否为 null
var unicorn;
assert(unicorn == null);
// 检查是否为 NaN
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
List 类型
几乎每种语言中最常见的集合可能是数组或有序的对象。在 dart 中,数组是 LIST 对象
定义
var list = [1,2,3];
使用
dart 的 LIST 索引从 0 开始
list[1] = 10;
list.length; // 获取长度
Maps 类型
map 将 key 和 value 关联到一起,key 必须是唯一的
定义
// 第一种定义
var gifts = {
// key value
'first' : 'partridge',
'second': 'turtledoves'
};
// 第二种定义
var gifts2 = new Map();
gifts2['first'] = 'partridge';
使用
// 获取值
gifts['first'];
// 判断 key 是否存在
assert(gifts['fifth'] == null);
// 获取长度
gifts.length;
Runes 类型
Dart 中 runes 是 UTF-32 字符集的 string 对象。
codeUnitAt 和 codeUnit 用来获取 UTF-16 字符集的字符。
使用runes 来获取 UTF-32 字符集的字符。
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
学习资源
- A Tour of the Dart Language
- https://www.jianshu.com/p/b21…
- 学习交流 QQ 群 (826912082)