前面
本文遵循google官方教程旨在快速说明和掌握Dart开发语言。并不会进行太详细深入的探讨。
大概印象
-
Rules
- 一切皆对象 并继承自
Object
,不论null
, 还是你认为的int
的int
!!! 因此,未初始化值的变量,默认值都是null
!!!// String -> int var one = int.parse('1'); assert(one == 1); // double -> String String piAsString = 3.14159.toStringAsFixed(2); assert(piAsString == '3.14'); List<int> //(a list of integers) List<dynamic> //(a list of objects of any type).
- Dart是可以转换为js的(最初设计初衷也是为了弥补js缺点)。所以,有些知识点可以和JS类比理解。因此,你就把一些特殊的概念理解为从别的语言抄来的,用来使js更牛逼的 ?
- 一切皆对象 并继承自
-
变量
var xxx = 1
xxx = 1
_xxx=1; // 这是私有变量哦!下划线_开头的就是针对【库/app】私有的!
dynamic name = 'Bob'; //可以赋值任意类型给name。但是!根据编码习惯,最好用 Object 代替 dynamic!!
var s1 = ''' You can create multi-line strings like this one. '''; // 多行字符串书写
关于const,你可以把它当作C语言里面的#define预定义, 和C++里面的const ;-) 例如,var a = 1; const b = 2; var d = const [1, 2]; const c = "$a不会生效,而$b是生效的,$b会被替换成2哦!" d[1] = 3; //这句话会报错哦!!!
// Check for NaN. var iMeantToDoThis = 0 / 0; assert(iMeantToDoThis.isNaN);
-
函数
func1(int p) { println('print param: ${ p + 1 }'); // 看到了吗?字符串中不光可以引用变量,还能做表达式! }
// 函数也是对象!也可以作为参数传递。 // !!因此,函数可以嵌套函数,对不对 ;-) Function func1({bool param1=false}, bool param2, [bool optionalParam=false, bool optionalParam2]) { return (num i) => addBy + i; } //闭包的概念了解一下。
typedef Compare = int Function(Object a, Object b);
-
操作符
意思 | 操作符 |
---|---|
是否是null | ?? |
关系判断 | >= > <= < as is is! |
做除法后,返回int | ~/ |
条件成员访问, 如 b = foo?.a; foo?.a = 4; | ?. |
- try-catch-finally
try {
//xxxxx
} on OutOfLlamasException {
//xxxx
rethrow; // 可以继续抛
} finally {
// Then clean up.
}
- 类 - class
- 默认构造函数是 无参 构造函数。
- 构造函数不会继承!不提供,就用默认,甭想白拿!想用父类的哪个构造函数构造自己,就实现哪个同名构造函数。
- 初始化顺序(无参调用):
1. initializer list // 有点类似c++的初始化列表
2. superclass’s no-arg constructor // 父类无参构造
3. main class’s no-arg constructor // 子类无参构造
- get / set 成员变量
num get right => left + width;
set right(num value) => left = value - width;
- 擦!操作符可以重载。
- 擦!noSuchMethod()。但不要在
dynamic
乱调。 - 擦!还有mixin对象, 用with使用。
class Maestro extends Person with Musical, Aggressive, Demented
call()
成员函数很特别,当你在类中定义了它,该类的实例变量可以想函数一样调用它classInstA(x,y);
- 泛型。好像没啥特别想提的。
- import
import 'package:lib2/lib2.dart' as lib2;
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
// Lazily loading a library
import 'package:greetings/hello.dart' deferred as hello;
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
- 异步操作 (ES6)
- Future:async/await
- Stream:await for
- 迭代器(关键字:sync*, async*, yield)
Dart的库非常丰富
可先参见:https://www.dartlang.org/guides/libraries/library-tour
关于Dart的编码规范等
可以看看:https://www.dartlang.org/guides/language/effective-dart