dart規(guī)范

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);
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容