1. Flutter,dart介紹。
1.dartpad介紹。
2.命名規(guī)范
1.大駝峰:類, 枚舉, 類型定義, 以及泛型,都需要使用大寫開頭的駝峰命名法
class HttpRequest { ... }
typedef Predicate<T> = bool Function(T value);
2.變量名、方法、參數(shù)名都應(yīng)該是小寫開頭的駝峰命名法
HttpRequest httpRequest;
void align(bool clearItems) {}
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');
3.命名庫、包、目錄、dart文件都應(yīng)該是小寫加上下劃線
library peg_parser/source_scanner;
import 'file_system.dart';
將引用使用as轉(zhuǎn)換的名字也應(yīng)該是小寫下劃線
?
import 'dart:math' as math;
import 'package:angular_components/angular_components'
as angular_components;
import 'package:js/js.dart' as js;
?
import 'dart:math' as Math;
import 'package:angular_components/angular_components'
as angularComponents;
import 'package:js/js.dart' as JS;
4/內(nèi)部類、方法、參數(shù)使用_開頭
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
}
不推薦如下寫法:,可能由于某些歷史原因,但是現(xiàn)在最新的不推薦了
const PI = 3.14;
const DefaultTimeout = 1000;
final URL_SCHEME = RegExp('^([a-z]+):');
class Dice {
static final NUMBER_GENERATOR = Random();
}
3.所有流控制結(jié)構(gòu),請使用大括號(hào),這樣做可以避免懸浮的else問題
例外::
一個(gè)if語句沒有else子句,其中整個(gè)if語句和then主體都適合一行。在這種情況下,如果你喜歡的話,你可以去掉大括號(hào)
if (arg == null) return defaultValue;
但是,如果流程體超出了一行需要分劃請使用大括號(hào):
if (overflowChars != other.overflowChars) {
return overflowChars < other.overflowChars;
}
不推薦如下寫法:
if (overflowChars != other.overflowChars)
return overflowChars < other.overflowChars;
4.運(yùn)算符及一些語法糖
條件表達(dá)式??
exp1 ?? exp2
如果exp1不為空,則使用exp1,否則使用exp2
在dart中 ?? 操作符表示當(dāng)一個(gè)值為空時(shí)會(huì)給它賦值 ?? 后面的數(shù)據(jù)
if (optionalThing?.isEnabled) {
print(“Have enabled thing.”);
}
當(dāng) optionalThing 為空的時(shí)候,上面就會(huì)有空指針異常了。
這里說明一下。 ?. 操作符相當(dāng)于做了一次判空操作,只有當(dāng) optionalThing 不為空的時(shí)候才會(huì)調(diào)用 isEnabled 參數(shù),當(dāng) optionalThing 為空的話默認(rèn)返回null,用在if判斷句中自然就不行了
// 如果為空的時(shí)候你想返回false的話:
optionalThing?.isEnabled ?? false;
// 如果為空的時(shí)候你想返回ture的話:
optionalThing?.isEnabled ?? true;
對象操作符 ?.
如果對象為空,則不調(diào)用方法,反之則調(diào)用,用于避免空指針
對象操作符is 和 is!
級聯(lián)操作符…
類似builder模式,意思是給當(dāng)前對象的屬性賦值,然后返回當(dāng)前對象,可以多次使用該操作符來實(shí)現(xiàn)屬性賦值和方法調(diào)用
Person()
..name = "Tom"
..age = 20
..work();
數(shù)組中的值拆分,使用...
5..初始化相關(guān)
使用 = 給參數(shù)設(shè)置默認(rèn)值
void insert(Object item, {int at = 0}) { … }
//早起寫法,不推薦
void insert(Object item, {int at: 0}) { … }
DON’T: 不要寫沒必要的getter 和 setter
class Box {
var contents;
//默認(rèn)自帶settter,getter
}
class Box {
var _contents;
get contents => _contents;
set contents(value) {
除非想要notif()之類的
_contents = value;
}
}
構(gòu)造函數(shù),盡可能使用簡單的初始化形式
class Point {
num x, y;
Point(num x, num y) {
this.x = x;
this.y = y;
}
}
推薦
class Point {
num x, y;
Point(this.x, this.y);
}