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 种方式

  1. Dart 标准库 - 这里库都是 Dart 内部自带的,比如:dart:io、dart:html、dart:math import 'dart:io';

  2. Pub 包管理器 - 使用前缀:package:,像 Flutter 提供的包就是用 Pub 管理器导入 import 'package:flutter/material.dart';

  3. 指定路径 - 可以是相对路径或绝对路径 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();

| 更多参考

dart 中文网 dart 编程工具 dart 语法 更多参考