dart官方文档中的 【Effective Dart】
规范主要分为四个部分:
- 样式规范
- 文档规范
- 使用规范
- 设计规范
每个部分都有许多的例子说明,每个例子都会以下面五个词中的某些作为开头:
- DO :表示你需要遵守的做法
- DONT :表示这样的做法是非常不好的
- PREFER :在多数情况下,都推荐的做法
- AVOID: 在多数情况下,都应该避免的做法
- CONSIDER: 需要你自己去斟酌的做法
在我看来,编码习惯都是因人而异的,并没有所谓的最佳方案。
如果你是一个人开发,当然不需要在意这些问题,但是如果你的代码需要展现给别人,或者你需要与别人协同开发,编码规范就非常有必要了。
下面,将会从官方文档中选取最基本,最典型,发生率较高的一些情况,作为规范说明。
✅表示正面做法,❌表示反面做法
样式规范
命名
DO: 类, 枚举, 类型定义, 以及泛型,都需要使用大写开头的驼峰命名法
✅
class SliderMenu { ... }
class HttpRequest { ... }
typedef Predicate<T> = bool Function(T value);
在使用注解时候,也应该这样
✅
class Foo {
const Foo([arg]);
}
@Foo(anArg)
class A { ... }
@Foo()
class B { ... }
不过为一个类的构造函数添加注解时,你可能需要创建一个小写开头的注解变量
✅
const foo = Foo();
@foo
class C { ... }
DO: 命名库、包、目录、dart文件都应该是小写加上下划线
✅
library peg_parser.source_scanner;
import 'file_system.dart';
import 'slider_menu.dart';
❌
library pegparser.SourceScanner;
import 'file-system.dart';
import 'SliderMenu.dart';
DO: 将引用使用as转换的名字也应该是小写下划线
✅
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;
DO: 变量名、方法、参数名都应该是小写开头的驼峰命名法
✅
var item;
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();
}
花括号
DO: 只有一个if语句且没有else的时候,并且在一行内能够很好的展示,就可以不用花括号
✅
if (arg == null) return defaultValue;