規(guī)范代碼命名,讓你的 Dart 代碼閱讀起來更愉悅!

前言

好的編碼風(fēng)格非常重要念搬,保持一致的命名能夠讓代碼閱讀體驗(yàn)更好抑堡,能夠讓團(tuán)隊(duì)協(xié)作的效率更高。本篇介紹一下官方推薦的命名規(guī)范朗徊。

標(biāo)識符定義

  • 大寫駝峰首妖,例如UpperCamelCase,每個(gè)單詞的首字母大寫爷恳。
  • 小寫駝峰悯搔,例如 lowerCamelCase,第一個(gè)單詞全部小寫舌仍,之后每個(gè)單詞的首字母大寫妒貌。
  • 使用下劃線“_”拼接全部小寫單詞,例如 lowercase_with_underscores铸豁。

命名規(guī)則1:統(tǒng)一使用大寫駝峰命名類型

例如類灌曙、枚舉、別名(typedefs)等使用大寫駝峰节芥,并且不使用分隔符在刺。下面是示例:

class SliderMenu { ... }

class HttpRequest { ... }

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

包括攜帶參數(shù)注解也應(yīng)該遵循這樣的原則:

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

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

@Foo()
class B { ... }

如果注解沒有攜帶參數(shù)逆害,那么可以使用小寫駝峰的方式。

const foo = Foo();

@foo
class C { ... }

命名規(guī)則2:類擴(kuò)展使用大寫駝峰

和類型一樣蚣驼,類擴(kuò)展定義也應(yīng)該使用大寫駝峰:

extension MyFancyList<T> on List<T> { ... }

extension SmartIterable<T> on Iterable<T> { ... }

命名規(guī)則3:庫魄幕、包名、目錄和源文件應(yīng)當(dāng)使用下劃線“_”拼接小寫單詞

由于某些文件系統(tǒng)不區(qū)分大小寫颖杏,而有的系統(tǒng)是區(qū)分的纯陨。因此很多項(xiàng)目要求文件名全部小寫。這種情況下使用分隔符可讀性會更高留储。下面是示例對比:

// 正確示例
library peg_parser.source_scanner;

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

// 錯(cuò)誤示例
library pegparser.SourceScanner;

import 'file-system.dart';
import 'SliderMenu.dart';

命名規(guī)則4:import 的別名使用下劃線“_”拼接小寫單詞

當(dāng)你要對引入的包或插件重命名時(shí)翼抠,應(yīng)當(dāng)使用下劃線“_”拼接小寫單詞的形式。

// 正確示例
import 'dart:math' as math;
import 'package:angular_components/angular_components'
    as angular_components;
import 'package:js/js.dart' as js;

// 錯(cuò)誤示例
import 'dart:math' as Math;
import 'package:angular_components/angular_components'
    as angularComponents;
import 'package:js/js.dart' as JS;

命名規(guī)則5:變量名获讳、類成員屬性阴颖、參數(shù)和常量使用小寫駝峰

類的成員屬性、變量丐膝、函數(shù)參數(shù)量愧、頂級定義參數(shù)和命名參數(shù)都應(yīng)該使用小寫駝峰方式。

// 正確示例
var count = 3;

HttpRequest httpRequest;

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

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

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

// 錯(cuò)誤示例
const PI = 3.14;
const DefaultTimeout = 1000;
final URL_SCHEME = RegExp('^([a-z]+):');

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

這里需要注意帅矗,很多語言都推薦常量使用下劃線+全部大寫字母的方式定義侠畔,但是 Dart 推薦的是小寫駝峰形式。這是因?yàn)榇蠖鄶?shù)情況下全部大寫的可讀性差损晤,尤其是對于像 CSS 顏色那樣的枚舉值软棺;常量有可能會更改為普通變量,這樣可能增加名稱修改尤勋。

命名規(guī)則6:縮寫命名規(guī)則

對于縮寫單詞喘落,如果字符多的時(shí)候全部大寫會很奇怪,例如 HTTPSFTP 這樣看起來顯然沒有 HttpsFtp 的可讀性好最冰。但是對于那種兩個(gè)字母的縮寫瘦棋,推薦根據(jù)可讀性決定是否要全部大寫還是大寫駝峰,比如 IO這類通用的可以寫成 IO暖哨,而ID 的話寫成 Id 可讀性也不差赌朋。下面是一個(gè)對比示例。

// 正確示例
class HttpConnection {}
class DBIOPort {}
class TVVcr {}
class MrRogers {}

var httpRequest = ...
var uiHandler = ...
Id id;

// 錯(cuò)誤示例
class HTTPConnection {}
class DbIoPort {}
class TvVcr {}
class MRRogers {}

var hTTPRequest = ...
var uIHandler = ...
ID iD;

命名規(guī)則7:參數(shù)列表中未使用的參數(shù)使用篇裁,_標(biāo)識

有些回調(diào)方法只使用部分參數(shù)沛慢,這個(gè)時(shí)候可以將未使用的參數(shù)使用下劃線替換,明確表示這個(gè)參數(shù)不會使用达布。而如果有多個(gè)參數(shù)沒被使用的話团甲,可以依次使用多個(gè)下劃線標(biāo)識。下面是一個(gè)例子:

futureOfVoid.then((_) {
  print('Operation complete.');
});

這個(gè)指導(dǎo)原則只適用于匿名方法或局部方法黍聂。而對于聲明式函數(shù)不應(yīng)該這么做躺苦,即便是不使用也需要有正確命名身腻,以保持參數(shù)語義明確。

命名規(guī)則8:僅對私有類成員屬性使用下劃線標(biāo)識匹厘。

Dart 使用下劃線開頭標(biāo)識類成員為私有屬性嘀趟,頂級定義的變量是文件局部變量。因此僅對這類使用下劃線標(biāo)識愈诚。同時(shí)她按,對于局部變量、參數(shù)和局部方法這些并沒有私有成員的概念扰路,因此沒必要使用下劃線開頭尤溜,避免引起誤解倔叼。

命名規(guī)則9:不要使用前綴字母

有些編程語言會建議使用一些特殊的字母標(biāo)識變量汗唱,例如數(shù)值類的使用 k 開頭。這種約定一方面挺難持續(xù)遵循丈攒,而且對可讀性的幫助也不大哩罪。下面是對應(yīng)的示例:

// 正確示例
defaultTimeout

// 錯(cuò)誤示例
kDefaultTimeout

總結(jié)

擁有良好且一致的命名風(fēng)格能夠讓你的代碼看起來更加舒服,愉悅巡验。其實(shí)也是個(gè)人軟實(shí)力的一個(gè)特征际插。記住一條,代碼是寫給人看的显设!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末框弛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捕捂,更是在濱河造成了極大的恐慌瑟枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件指攒,死亡現(xiàn)場離奇詭異慷妙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)允悦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門膝擂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隙弛,你說我怎么就攤上這事架馋。” “怎么了全闷?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵绩蜻,是天一觀的道長。 經(jīng)常有香客問我室埋,道長办绝,這世上最難降的妖魔是什么伊约? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮孕蝉,結(jié)果婚禮上屡律,老公的妹妹穿的比我還像新娘。我一直安慰自己降淮,他們只是感情好超埋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佳鳖,像睡著了一般霍殴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上系吩,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天来庭,我揣著相機(jī)與錄音,去河邊找鬼穿挨。 笑死月弛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的科盛。 我是一名探鬼主播帽衙,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贞绵!你這毒婦竟也來了厉萝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榨崩,失蹤者是張志新(化名)和其女友劉穎谴垫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜡饵,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弹渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溯祸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢专。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖焦辅,靈堂內(nèi)的尸體忽然破棺而出博杖,到底是詐尸還是另有隱情,我是刑警寧澤筷登,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布剃根,位于F島的核電站,受9級特大地震影響前方,放射性物質(zhì)發(fā)生泄漏狈醉。R本人自食惡果不足惜廉油,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苗傅。 院中可真熱鬧抒线,春花似錦、人聲如沸渣慕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊桦。三九已至眨猎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間强经,已是汗流浹背睡陪。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夕凝,地道東北人宝穗。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓户秤,卻偏偏與公主長得像码秉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鸡号,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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