No more than code.
Dart 语言入门
- dart 创建对象可以省略 new,如 new Column()可以写为 Column()
- Dart 没有 public,private。Dart 的可见范围是以 library 库为单位的,每一个 Dart 文件就是一个库,Dart 中表示库级别私有,即可以修饰变量,也可以修饰对象,还可以修饰方法。
- void 一种特殊的类型,表示一个值永远不会被使用。类似于 main() 和 printInteger() 的函数,以 void 声明的函数返回类型,并不会返回值。
- 打印日志:print()
- var 用于定义变量,通过这种方式定义变量不需要指定变量类型
- 尽管 Dart 是强类型语言,但是在声明变量时指定类型是可选的,因为 Dart 可以进行类型推断。在上述代码中,变量 number 的类型被推断为 int 类型。如果想显式地声明一个不确定的类型,可以使用特殊类型 dynamic
- Dart 支持泛型,比如 List
(表示一组由 int 对象组成的列表)或 List (表示一组由任何类型对象组成的列表)。 - 如果你不想更改一个变量,可以使用关键字 final 或者 const 修饰变量
- main() 程序开始执行函数,该函数是特定的、必须的、顶级函数。
| 定义变量
var name = 'Bob'; // var 声明的变量,若初始值为 null,后面可以赋值任何数据类型的值;若初始值已明确数据类型则后续不能更改。
dynamic name = 'Bob'; // dynamic 修饰的变量,可以赋给任何类型的值。
String name = 'Bob'; // 显式声明可以推断出的类型
int lineCount; // lineCount == null; 未初始化的变量默认值是 null。即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象
// Final 和 Const 创建的变量不能被修改,Const 变量 是隐式 Final 的类型
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
// 如果 Const 变量是类级别的,需要标记为 static const。
const bar = 1000000;
const double atm = 1.01325 * bar;
| 基本数据类型
- 动态类型 - var、dynamic。
- 数值型 - Num、int、double、bool(布尔值)。Num 是仅限于数字的动态类型,数值可以是 int 也可以是 double。
- 集合型 - List、Map,Dart 没有数组的概念,数组就等于集合
- 文本型 - String
- 方法类 - Function
字符串和数字之间的转换:
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
String
// 以使用三个单引号或者三个双引号创建多行字符串:
var s1 = '''
你可以像这样创建多行字符串。
''';
var s2 = """这也是一个多行字符串。""";
// 在字符串前加上 r 作为前缀创建 “raw” 字符串(即不会被做任何处理(比如转义)的字符串):
var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。';
Boolean
// 检查是否为空字符串 (Check for an empty string).
var fullName = '';
assert(fullName.isEmpty);
// 检查是否小于等于零。
var hitPoints = 0;
assert(hitPoints <= 0);
// 检查是否为 null。
var unicorn;
assert(unicorn == null);
// 检查是否为 NaN。
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Lists
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
// 可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
// 如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
- list 的增删改查
// 添加
var testList = List();
testList.add(14);
testList.add('111');
// 固定长度的list不能通过add添加数据,可通过以下方法
var testList = new List(3);
testList[0] = '雷锋';
testList[1] = '18';
testList[2] = '好人';
// 把一个数组元素全部添加到另外一个数组里
var testList1 = new List();
var testList2 = ['雷锋','18','好人'];
testList1.addAll(testList2);
// 向指定位置添加元素,如果位置越界就会报错
var testList = ['雷锋','18'];
testList.insert(2,'好人');
Dart 在 2.3 还同时引入了 Collection If 和 Collection For,在构建集合时,可以使用条件判断(if)和循环(for)
// 下面示例是使用 Collection If 来创建一个 List 的示例,它可能包含 3 个或 4 个元素:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
// 下面示例是使用 Collection For 将列表中的元素修改后添加到另一个列表中的示例:
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
Sets
// 使用 Set 字面量来创建一个 Set 集合的方法:
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
// 可以使用在 {} 前加上类型参数的方式创建一个空的 Set(例1),或者将 {} 赋值给一个 Set 类型的变量(例2):
var names = <String>{}; // 类型+{}的形式创建Set。例1
Set<String> names = {}; // 声明类型变量的形式创建 Set (This works, too).例2
var names = {}; // 注意:这样的形式将创建一个 Map 而不是 Set (Creates a map, not a set.)
// 向一个已存在的 Set 中添加项目可以使用 add() 方法或 addAll() 方法:
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
// 使用 .length 可以获取 Set 中元素的数量:
assert(elements.length == 5);
Maps
// 使用 Map 的构造器创建 Map
var gifts = Map();
// 向现有的 Map 中添加键值对
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
// 使用 .length 可以获取 Map 中键值对的数量:
assert(gifts.length == 3);
| 操作运算符
| 库的导入
Dart 导库的 3 种方式
-
Dart 标准库 - 这里库都是 Dart 内部自带的,比如:dart:io、dart:html、dart:math
import 'dart:io';
-
Pub 包管理器 - 使用前缀:package:,像 Flutter 提供的包就是用 Pub 管理器导入
import 'package:flutter/material.dart';
-
指定路径 - 可以是相对路径或绝对路径
import 'lib/student/student.dart';
show、hide、as 关键字
show - 只导入指定的文件 hide - 隐藏指定文件,其他都导入 as - 起别名
import 'lib/student/student.dart' show Student, Person;
import 'lib/student/student.dart' hide Person;
import 'lib/student/student.dart' as Stu;
// 使用的使用要加上别名
Stu.Student s = new Stu.Student();