规范代码命名,让你的 Dart 代码阅读起来更愉悦!

前言

好的编码风格非常重要,保持一致的命名能够让代码阅读体验更好,能够让团队协作的效率更高。本篇介绍一下官方推荐的命名规范。

标识符定义

  • 大写驼峰,例如UpperCamelCase,每个单词的首字母大写。
  • 小写驼峰,例如 lowerCamelCase,第一个单词全部小写,之后每个单词的首字母大写。
  • 使用下划线“_”拼接全部小写单词,例如 lowercase_with_underscores。

命名规则1:统一使用大写驼峰命名类型

例如类、枚举、别名(typedefs)等使用大写驼峰,并且不使用分隔符。下面是示例:

class SliderMenu { ... }

class HttpRequest { ... }

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

包括携带参数注解也应该遵循这样的原则:

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

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

@Foo()
class B { ... }

如果注解没有携带参数,那么可以使用小写驼峰的方式。

const foo = Foo();

@foo
class C { ... }

命名规则2:类扩展使用大写驼峰

和类型一样,类扩展定义也应该使用大写驼峰:

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

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

命名规则3:库、包名、目录和源文件应当使用下划线“_”拼接小写单词

由于某些文件系统不区分大小写,而有的系统是区分的。因此很多项目要求文件名全部小写。这种情况下使用分隔符可读性会更高。下面是示例对比:

// 正确示例
library peg_parser.source_scanner;

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

// 错误示例
library pegparser.SourceScanner;

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

命名规则4:import 的别名使用下划线“_”拼接小写单词

当你要对引入的包或插件重命名时,应当使用下划线“_”拼接小写单词的形式。

// 正确示例
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;

命名规则5:变量名、类成员属性、参数和常量使用小写驼峰

类的成员属性、变量、函数参数、顶级定义参数和命名参数都应该使用小写驼峰方式。

// 正确示例
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();
}

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

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

这里需要注意,很多语言都推荐常量使用下划线+全部大写字母的方式定义,但是 Dart 推荐的是小写驼峰形式。这是因为大多数情况下全部大写的可读性差,尤其是对于像 CSS 颜色那样的枚举值;常量有可能会更改为普通变量,这样可能增加名称修改。

命名规则6:缩写命名规则

对于缩写单词,如果字符多的时候全部大写会很奇怪,例如 HTTPSFTP 这样看起来显然没有 HttpsFtp 的可读性好。但是对于那种两个字母的缩写,推荐根据可读性决定是否要全部大写还是大写驼峰,比如 IO这类通用的可以写成 IO,而ID 的话写成 Id 可读性也不差。下面是一个对比示例。

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

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

// 错误示例
class HTTPConnection {}
class DbIoPort {}
class TvVcr {}
class MRRogers {}

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

命名规则7:参数列表中未使用的参数使用_标识

有些回调方法只使用部分参数,这个时候可以将未使用的参数使用下划线替换,明确表示这个参数不会使用。而如果有多个参数没被使用的话,可以依次使用多个下划线标识。下面是一个例子:

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

这个指导原则只适用于匿名方法或局部方法。而对于声明式函数不应该这么做,即便是不使用也需要有正确命名,以保持参数语义明确。

命名规则8:仅对私有类成员属性使用下划线标识。

Dart 使用下划线开头标识类成员为私有属性,顶级定义的变量是文件局部变量。因此仅对这类使用下划线标识。同时,对于局部变量、参数和局部方法这些并没有私有成员的概念,因此没必要使用下划线开头,避免引起误解。

命名规则9:不要使用前缀字母

有些编程语言会建议使用一些特殊的字母标识变量,例如数值类的使用 k 开头。这种约定一方面挺难持续遵循,而且对可读性的帮助也不大。下面是对应的示例:

// 正确示例
defaultTimeout

// 错误示例
kDefaultTimeout

总结

拥有良好且一致的命名风格能够让你的代码看起来更加舒服,愉悦。其实也是个人软实力的一个特征。记住一条,代码是写给人看的!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容