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:变量名、类成员属性、参数和常量使用小写驼峰
类的成员属性、变量、函数参数、顶级定义参数和命名参数都应该使用小写驼峰方式。// 堆代码 www.duidaima.com // 正确示例 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 颜色那样的枚举值;常量有可能会更改为普通变量,这样可能增加名称修改。
// 正确示例 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.'); });这个指导原则只适用于匿名方法或局部方法。而对于声明式函数不应该这么做,即便是不使用也需要有正确命名,以保持参数语义明确。
// 正确示例 defaultTimeout // 错误示例 kDefaultTimeout