構(gòu)建良好的 Dart 編碼風(fēng)格:導(dǎo)入導(dǎo)出次序和基本編碼規(guī)范

前言

我們之前介紹了 Dart 的命名規(guī)范,本篇來(lái)介紹 Dart 的代碼次序和格式化規(guī)范抑党。開(kāi)篇還是重復(fù)那句話:代碼是寫給人看的包警。

import 導(dǎo)入次序

導(dǎo)入次序本身并不會(huì)影響代碼的執(zhí)行,但是整齊的導(dǎo)入會(huì)讓你的代碼看起來(lái)更加舒適底靠,也會(huì)讓人感覺(jué)你的代碼更有條理害晦。官方對(duì)于導(dǎo)入的順序建議如下圖所示。

導(dǎo)入次序.png

而對(duì)于同級(jí)別的,建議是按字母次序排序(這個(gè)有點(diǎn)難??)壹瘟。下面是示例:

// 正確示例
import 'dart:async';
import 'dart:html';

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

import '../components/buttons.dart';
import '../utils/http.dart';

// 錯(cuò)誤示例 (未按字母排序)
import 'package:foo/foo.dart';
import 'package:bar/bar.dart';

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

export 應(yīng)當(dāng)排在所有 import 之后鲫剿,并在二者之間空一行

這個(gè)好理解,導(dǎo)出應(yīng)當(dāng)放在導(dǎo)入之后稻轨,而且為了區(qū)別灵莲,在之間空一行,下面是示例:

// 正確示例
import 'src/error.dart';
import 'src/foo_bar.dart';

export 'src/error.dart';

// 錯(cuò)誤示例
import 'src/error.dart';
export 'src/error.dart';
import 'src/foo_bar.dart';

使用 dart format 工具格式化代碼

Dart 提供了 dart format 工具來(lái)格式化代碼殴俱。簡(jiǎn)單的命令如下政冻,詳細(xì)可以查看官方文檔:dart-format

# 格式化當(dāng)前文件夾文件
dart format .
# 使用空格分隔格式化多個(gè)目錄或文件
dart format lib bin/updater.dart 

當(dāng)然线欲,對(duì)于 VSCode 而言明场,推薦使用 Prettier - Code Formatter 這個(gè)插件,保存后會(huì)自動(dòng)格式化李丰。

單行代碼不要超過(guò)80個(gè)字符

這個(gè)是大多數(shù)編程語(yǔ)言的要求苦锨,屏幕大的可能沒(méi)太大感知,但是屏幕小的時(shí)候代碼閱讀體驗(yàn)及其糟糕趴泌。對(duì)于 Flutter舟舒,使用了 Prettier 插件后,一個(gè)好的習(xí)慣是在屬性后面加一個(gè)逗號(hào)嗜憔,這樣會(huì)自動(dòng)換行秃励。比如下面是沒(méi)有逗號(hào)和逗號(hào)的區(qū)別,顯然加了逗號(hào)的閱讀體驗(yàn)更好痹筛。

// 每個(gè)屬性后加逗號(hào)
PrimaryButton(
  onPressed: () {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (BuildContext context) =>
            const WindmillIndicatorDemo(),
      ),
    );
  },
  title: '大風(fēng)車動(dòng)畫',
),

// 不加逗號(hào)的情況
PrimaryButton(
  onPressed: () {
    Navigator.of(context).push(MaterialPageRoute(
      builder: (BuildContext context) =>
          const WindmillIndicatorDemo(),
    ));
  },
  title: '大風(fēng)車動(dòng)畫'),

使用 Prettier 也可以設(shè)置超出字符后自動(dòng)換行。關(guān)于 Prettier 的設(shè)置可以查看 GitHub 的說(shuō)明文檔:prettier-vscode廓鞠。

分支代碼

對(duì)于存在多個(gè)分支的控制代碼帚稠,統(tǒng)一使用大括號(hào)將各個(gè)分支包裹起來(lái)。

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

// 錯(cuò)誤示例
if (isWeekDay) {
  print('Bike to work!');
} else print('Go dancing or read a book!');

對(duì)于只有一條分支語(yǔ)句床佳,且一行可以寫完的(80個(gè)字符以內(nèi))可以不適用大括號(hào)滋早。

if (arg == null) return defaultValue;

而對(duì)于一行寫不完的,那么還是需要使用大括號(hào)包裹起來(lái):

// 正確示例
if (overflowChars != other.overflowChars) {
  return overflowChars < other.overflowChars;
}

// 錯(cuò)誤示例
if (overflowChars != other.overflowChars)
  return overflowChars < other.overflowChars;

操作符

對(duì)于賦值砌们,運(yùn)算符杆麸、條件判斷、箭頭函數(shù)等浪感,在操作符前后各空一格昔头,以增強(qiáng)閱讀體驗(yàn)。下面的示例對(duì)比影兽,哪個(gè)閱讀體驗(yàn)更好揭斧,一目了然!

// 正確示例
double r = 3.0;
double area = pi * r * r;
_elevation = _elevation == 0 ? 10.0 : 0.0;
if (area <= 2.0) {
  print('Less than 2.0. ');
}

MaterialPageRoute(
  builder: (BuildContext context) => const AnimatedWidgetDemo(),
),

// 錯(cuò)誤示例
double r=3.0;
double area=pi*r*r;
_elevation=_elevation==0?10.0:0.0;
if (area<=2.0) {
  print('Less than 2.0. ');
}

MaterialPageRoute(
  builder: (BuildContext context)=>const AnimatedWidgetDemo(),
),

總結(jié)

本篇介紹了 Dart 語(yǔ)言的導(dǎo)入導(dǎo)出次序峻堰,以及編碼的最基本的規(guī)則讹开。這樣的規(guī)則也適用于其他語(yǔ)言盅视,只要記住那句話:代碼是寫給人看的!注重代碼命名風(fēng)格和編碼風(fēng)格旦万,然后闹击,善用一些代碼格式化工具,就能夠讓你的編碼看起來(lái)井井有條成艘!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赏半,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狰腌,更是在濱河造成了極大的恐慌除破,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼腔,死亡現(xiàn)場(chǎng)離奇詭異瑰枫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)丹莲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門光坝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人甥材,你說(shuō)我怎么就攤上這事盯另。” “怎么了洲赵?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵鸳惯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叠萍,道長(zhǎng)芝发,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任苛谷,我火速辦了婚禮辅鲸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腹殿。我一直安慰自己独悴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布锣尉。 她就那樣靜靜地躺著刻炒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪自沧。 梳的紋絲不亂的頭發(fā)上落蝙,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼筏勒。 笑死移迫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的管行。 我是一名探鬼主播厨埋,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捐顷!你這毒婦竟也來(lái)了荡陷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迅涮,失蹤者是張志新(化名)和其女友劉穎废赞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叮姑,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唉地,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了传透。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘沼。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朱盐,靈堂內(nèi)的尸體忽然破棺而出群嗤,到底是詐尸還是另有隱情,我是刑警寧澤兵琳,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布狂秘,位于F島的核電站,受9級(jí)特大地震影響躯肌,放射性物質(zhì)發(fā)生泄漏者春。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一羡榴、第九天 我趴在偏房一處隱蔽的房頂上張望碧查。 院中可真熱鬧运敢,春花似錦校仑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至卦方,卻和暖如春羊瘩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工尘吗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逝她,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓睬捶,卻偏偏與公主長(zhǎng)得像黔宛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子擒贸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 目錄 1 簡(jiǎn)介 2 變量臀晃、長(zhǎng)量、命名規(guī)則 3 常用數(shù)據(jù)類型 4 字符串拼接 5 數(shù)據(jù)類型判斷 6 循環(huán)語(yǔ)句介劫,bre...
    林ze宏閱讀 581評(píng)論 0 2
  • 文章首發(fā)地址: http://www.reibang.com/p/047eb78dce53 前言 最近看qq群里...
    做人要簡(jiǎn)單閱讀 17,208評(píng)論 0 23
  • 說(shuō)明 版本:1.0.0 上次修改時(shí)間:2020 年 4 月 29 日 寫在前面 本文檔適用于原生前端代碼的風(fēng)格樣式...
    alanwhy閱讀 881評(píng)論 0 4
  • 注釋 要像句子一樣格式化 除非是區(qū)分大小寫的標(biāo)識(shí)符徽惋,否則第一個(gè)單詞要大寫。以句號(hào)結(jié)尾(或“!”或“?”)座韵。對(duì)于所有...
    nero_i閱讀 410評(píng)論 0 3
  • 前言 工欲善其事必先利其器险绘,用 IntelliJ IDEA 開(kāi)發(fā)幾年了,它帶來(lái)工作效率上的提升是很顯著的回右。本文分享...
    anyesu閱讀 10,224評(píng)論 0 23