高效編寫Dart--樣式指南

如何閱讀指南

  • DO 應始終遵循的準則
  • DON'T 不應該這么使用的準則
  • PREFER 應該遵循的準則,但是在某些情況下帖世,可以根據(jù)個人理解忽略,不遵循
  • DON'T 不應該這么使用的準則
  • AVOID 不應該遵循的準則沸枯,但是在某些情況下狮暑,可以根據(jù)個人理解忽略,不遵循
  • CONSIDER 可遵循或者不遵循的規(guī)則辉饱,取決于個人偏好

標識符

主要有三種風格:

  • UpperCamelCase 每個單詞的首字母大寫
  • lowerCamelCase 首字母小寫,其余每個單詞的首字母大寫
  • lowercase_with_underscores 單詞全部使用小寫拣展,使用用_ 分隔

DO 命名類型使用 UpperCamelCase 風格

Classes(類), enums(枚舉), typedef, and type parameters(類型參數(shù))應該大寫每個單詞的第一個字母(包括第一個單詞)彭沼,并且不使用分隔符。
Linter規(guī)則:camel_case_type

class SliderMenu { ... }

class HttpRequest { ... }

typedef Predicate<T> = bool Function(T value);  

這甚至包括打算在元數(shù)據(jù)注釋中使用的類备埃。(關于元數(shù)據(jù):使用元數(shù)據(jù)來給你的代碼提供附加信息姓惑,以 @ 字符開頭,后面跟一個編譯時的常量引用(例如 deprecated)或者調(diào)用常量構造器的語句按脚。)

class Foo {
  const Foo([arg]);
}

@Foo(anArg)
class A { ... }

@Foo()
class B { ... }

如果注釋類的構造函數(shù)不帶參數(shù)于毙,則可能使用 lowerCamelCase 風格。

const foo = Foo();

@foo
class C { ... }

DO 命名libraries(庫), packages(包), directories(目錄), source files(源文件)使用 lowercase_with_underscores 風格

Linter規(guī)則:library_names辅搬, file_names

library peg_parser.source_scanner;

import 'file_system.dart';
import 'slider_menu.dart';

DO 命名導入文件的名稱前綴使用 lowercase_with_underscores 風格

Linter規(guī)則:library_prefixes

import 'dart:math' as math;
import 'package:angular_components/angular_components'
    as angular_components;
import 'package:js/js.dart' as js;

DO 命名其他標識符使用 lowerCamelCase 風格

Linter規(guī)則:non_constant_identifier_names
類成員唯沮, 頂級定義脖旱, 變量參數(shù)命名參數(shù)應該大寫除第一個單詞之外的每個單詞的第一個字母介蛉,并且不使用分隔符萌庆。

var item;

HttpRequest httpRequest;

void align(bool clearItems) {
  // ...
}

PREFER 命名常量使用 lowerCamelCase 風格

Linter規(guī)則:constant_identifier_names

const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');

class Dice {
  static final numberGenerator = Random();
}
// 您可以使用`SCREAMING_CAPS`來保持與現(xiàn)有代碼的一致性,如下所示:
// 1. 向已經(jīng)使用 `SCREAMING_CAPS` 的文件或庫添加代碼時币旧。
// 2. 當生成與Java代碼并行的Dart代碼時践险。如,在由protobufs生成的枚舉類型中吹菱。
const PI = 3.14;
const DefaultTimeout = 1000;
final URL_SCHEME = RegExp('^([a-z]+):');

class Dice {
  static final NUMBER_GENERATOR = Random();
}

DO 首字母縮寫詞和縮寫詞的首字母大寫巍虫,長度不要超過兩個字母。

大寫的首字母縮寫詞很難讀懂鳍刷,多個相鄰的首字母縮寫詞會導致名稱含糊不清占遥。例如,給定一個以HTTPSFTP 開頭的名稱倾剿,無法判斷它是引用HTTPSFTP還是HTTPSFTP筷频。

為了避免這種情況,縮略語和縮寫詞都像普通單詞一樣大寫前痘,只有兩個字母的縮略語除外凛捏。(ID和Mr這樣的兩個字母縮寫仍然像單詞一樣大寫。)

// Good
HttpConnectionInfo
uiHandler
IOStream
HttpRequest
Id
DB

// Bad
HTTPConnection
UiHandler
IoStream
HTTPRequest
ID
Db

DON’T 使用前綴字母

// Good
defaultTimeout

// Bad
kDefaultTimeout

排序

所有排序準則:directives_ordering

DO “dart:”引入放在最開始的地方

import 'dart:async';
import 'dart:html';

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

DO 在相對路徑的引入之前 放置“package:”

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'util.dart';

PREFER 在導入自己的包之前 放置“package:”

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'package:my_package/util.dart';

DO 導出放在所有的導入之后

// Good
import 'src/error.dart';
import 'src/foo_bar.dart';

export 'src/error.dart';

// Bad
import 'src/error.dart';
export 'src/error.dart';
import 'src/foo_bar.dart';

DO 按字母順序排序

// Good
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'foo.dart';
import 'foo/foo.dart';

// Bad
import 'package:foo/foo.dart';
import 'package:bar/bar.dart';

import 'foo/foo.dart';
import 'foo.dart';

格式化

DO 使用格式化代碼 dartfmt

格式化是一項繁瑣的工作芹缔,在重構過程中特別耗時坯癣。幸運的是,你不必擔心它最欠。我們提供了一個名為 dartfmt的自動代碼格式化程序示罗,它可 以為您完成代碼格式化。我們有一些關于它適用的規(guī)則的文檔芝硬,但是Dart的官方空白處理規(guī)則是dartfmt產(chǎn)生的蚜点。

其余的格式指南適用于dartfmt無法為您修復的一些內(nèi)容。

CONSIDER 更改代碼以使其更易于格式化

格式化程序可以使用你拋出的任何代碼盡力而為拌阴,但它無法創(chuàng)造奇跡绍绘。如果您的代碼具有特別長的標識符,深層嵌套的表達式迟赃,不同類型的運算符的混合等陪拘,格式化的輸出可能仍然難以閱讀。

發(fā)生這種情況時纤壁,請重新組織或簡化代碼左刽。考慮縮短局部變量名稱或?qū)⒈磉_式提升到新的局部變量中酌媒。換句話說欠痴,如果您手動格式化代碼并嘗試使其更具可讀性迄靠,請進行相同類型的修改。將dartfmt視為一種合作伙伴關系斋否,您可以協(xié)同工作梨水,有時可以迭代地生成漂亮的代碼。

AVOID 避免行超過80個字符

盡量不要連續(xù)使用超過80個字符

DO 對所有流控制結(jié)構使用花括號

Linter規(guī)則:curly_braces_in_flow_control_structures

// Good
if (isWeekDay) {
  print('Bike to work!');
} else {
  print('Go dancing or read a book!');
}

if (arg == null) return defaultValue;

if (overflowChars != other.overflowChars) {
  return overflowChars < other.overflowChars;
}

// Bad
if (overflowChars != other.overflowChars)
  return overflowChars < other.overflowChars;
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茵臭,一起剝皮案震驚了整個濱河市疫诽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旦委,老刑警劉巖奇徒,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缨硝,居然都是意外死亡摩钙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門查辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胖笛,“玉大人,你說我怎么就攤上這事宜岛〕び唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵萍倡,是天一觀的道長身弊。 經(jīng)常有香客問我,道長列敲,這世上最難降的妖魔是什么阱佛? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮戴而,結(jié)果婚禮上凑术,老公的妹妹穿的比我還像新娘。我一直安慰自己所意,他們只是感情好曹阔,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布确垫。 她就那樣靜靜地躺著樱蛤,像睡著了一般硅蹦。 火紅的嫁衣襯著肌膚如雪翅帜。 梳的紋絲不亂的頭發(fā)上姻檀,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音涝滴,去河邊找鬼绣版。 笑死胶台,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杂抽。 我是一名探鬼主播诈唬,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缩麸!你這毒婦竟也來了铸磅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杭朱,失蹤者是張志新(化名)和其女友劉穎阅仔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弧械,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡八酒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刃唐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞迷。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖画饥,靈堂內(nèi)的尸體忽然破棺而出衔瓮,到底是詐尸還是另有隱情,我是刑警寧澤荒澡,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布报辱,位于F島的核電站,受9級特大地震影響单山,放射性物質(zhì)發(fā)生泄漏碍现。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一米奸、第九天 我趴在偏房一處隱蔽的房頂上張望昼接。 院中可真熱鬧,春花似錦悴晰、人聲如沸慢睡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漂辐。三九已至,卻和暖如春棕硫,著一層夾襖步出監(jiān)牢的瞬間髓涯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工哈扮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纬纪,地道東北人蚓再。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像包各,于是被迫代替她去往敵國和親摘仅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 更新時間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范问畅,適用于主要的Python發(fā)行版中組成標準庫的Pytho...
    超net閱讀 5,862評論 0 15
  • 原文 原文下載之后的格式略有點不友好,利用簡述的markdown,編輯一下.版權歸原作者 PEP Index > ...
    大飛哥閱讀 2,483評論 0 0
  • 如何閱讀指南 DO 應始終遵循的準則 DON'T 不應該這么使用的準則 PREFER 應該遵循的準則娃属,但是在某些情...
    _白羊閱讀 1,538評論 2 1
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評論 0 5
  • 如何閱讀指南 DO 應始終遵循的準則 DON'T 不應該這么使用的準則 PREFER 應該遵循的準則,但是在某些情...
    _白羊閱讀 3,071評論 0 3