做了这么久程序员,有一件事是一直以来都让我感到头疼的,这件事说起来简单却又复杂,那就是 规范 问题,PHP 有 PHP 的规范、JavaScript 有 JavaScript 的规范、Dart 又有 Dart 的规范,几乎接触的所有语言或框架,它们都有自己的规范,但是 👴🏻 也没办法,不遵循规范最后为难的还是自己,写的时候只有上帝和你知道那段代码是什么意思,过一段时间后就只有上帝知道了。
本文来自于 Dart 官网的整理。
使用 UpperCamelCase 命名类型
Classes(类名)、 enums(枚举类型)、 typedefs(类型定义)、 以及 type parameters(类型参数)应该把每个单词的首字母都大写(包含第一个单词), 不使用分隔符。
class SliderMenu { ... }
class HttpRequest { ... }
typedef Predicate = bool Function<T>(T value);
这里包括使用元数据注解的类。
class Foo {
const Foo([arg]);
}
(anArg)
class A { ... }
()
class B { ... }
如果注解类的构造函数是无参函数, 则可以使用一个 lowerCamelCase 风格的常量来初始化这个注解。
const foo = Foo();
class C { ... }
使用 lowercase_with_underscores 方式命名库、包、文件夹、源文件
使用 lowercase_with_underscores 风格命名库和源文件名
一些文件系统不区分大小写,所以很多项目要求文件名必须是小写字母。 使用分隔符这种形式可以保证命名的可读性。使用下划线作为分隔符可确保名称仍然是有效的Dart标识符, 如果语言后续支持符号导入,这将会起到非常大的帮助。
library peg_parser.source_scanner;
import 'file_system.dart';
import 'slider_menu.dart';
使用 lowercase_with_underscores 风格命名导入的前缀
import 'dart:math' as math;
import 'package:angular_components/angular_components' as angular_components;
import 'package:js/js.dart' as js;
使用 lowerCamelCase 风格来命名其他的标识符
类成员、顶级定义、变量、参数以及命名参数等 除了第一个单词,每个单词首字母都应大写,并且不使用分隔符。
var item;
HttpRequest httpRequest;
void align(bool clearItems) {
// ...
}
使用 lowerCamelCase 来命名常量
在新的代码中,使用 lowerCamelCase 来命名常量,包括枚举的值。 已有的代码使用了 SCREAMING_CAPS 风格, 你可以继续全部使用该风格来保持代码的一致性。
const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');
class Dice {
static final numberGenerator = Random();
}
可以使用 SCREAMING_CAPS 与现有代码保持一致,比如:
-
将代码添加到已使用 SCREAMING_CAPS 的文件或库时。
-
生成与 Java 代码并行的 Dart 代码时。例如,来自 protobufs 的枚举类型
缩略词和缩写词的首字母大写问题
首字母大写缩略词比较难阅读, 特别是多个缩略词连载一起的时候会引起歧义。 例如,一个以 HTTPSFTP 开头的名字, 没有办法判断它是指 HTTPS FTP 还是 HTTP SFTP。
为了避免上面的情况,三个字母及以上长度的缩略词和缩写词要像普通单词一样首字母大写,剩余字母小写:
class Api {}
class HttpConnectionInfo {}
class HttpRequest {}
两个字母长度的首字母缩略词则保持两个字母都是大写:
class DB {}
class UIHandler {}
class IOStream {}
而例如 ID 和 Mr. 这样的双字母缩写词则和普通单词一样,首字母大写,第二个字母小写:
class Id {}
class Mr {}
首字母缩略词(acronyms)
首字母缩略词,指取若干单词首字母组成一个新单词,如:HTTP
= HyperText Transfer Protocol
缩写词(abbreviations)
缩写词,指取某一单词的部分字母(或其他缩短单词的方式)代表整个单词,如:ID
= identification