注释
在说明成员以及类型的时候应该使用 doc 注释。
尽管 Dart 支持两种类型的 doc 注释(///
以及 /**
),我们推荐 ///
,因为它更加紧凑(/**
以及 */
用于多行注释,并且有两行是空的)。在有些情况下,///
也更加容易阅读,比如在某个 doc 注释中包含了一个列表,并且该列表使用 *
来标记各个列表项。
// good
/// Parses a set of option strings.
///
/// For each option:
///
/// * If it is `null`, then it is ignored.
/// * If it is a string, then [validate] is called on it.
/// * If it is any other type, it is *not* validated.
void parse(List options) {
// ...
}
在 doc 注释中,你可以使用 markdown 格式。
应该使用单行注释。
// good
greet(name) {
// Assume we have a valid name.
print('Hi, $name!');
}
// bad
greet(name) {
/* Assume we have a valid name. */
print('Hi, $name!');
}
你可以使用块注释(/* ... */
)来在某段代码之外进行注释。
注释也应该像普通句子一样大小写并且添加标点。
这并不是说注释就应该是一个完整的句子,尽管多数情况下它应该是一个完整的句子。“返回条目的数量”就是一个可接受的注释。
// good
// Remove the last item from the collection.
// bad
// remove the last item from the collection
在注释中应该使用方括号把相应域中的标识符标记出来。
如果你把变量、方法或者类型的名称放在方括号内,那么文档生成器就可以查找到相应的名称,并且将其与代码连接起来。
// good
import 'dart:math';
/// Rolls both [Dice] and returns the highest rolled value.
num greatestRoll(Dice a, Dice b) => max(a.roll(), b.roll());
//
在文档注释中应该描述函数签名。
在其他语言中,要使用很多的标签以及各个部分来说明函数的参数是什么,返回值又是什么。
//bad
/// Defines a flag with the given name and abbreviation.
///
/// @param name The name of the flag.
/// @param abbr The abbreviation for the flag.
/// @returns The new flag.
/// @throws IllegalArgumentException If there is already an option with
/// the given name or abbreviation.
Flag addFlag(String name, String abbr) {
// ...
}
使用 Dart 则相当便捷,你可以直接使用方括号把参数等信息整合到函数描述中。
// good
/// Defines a flag.
///
/// Throws an [IllegalArgumentException] if there is already an option named
/// [name] or there is already an option using abbreviation [abbr]. Returns
/// the new flag.
Flag addFlag(String name, String abbr) {
// ...
}
注释应该放在元数据注解之前。
// good
/// _Deprecated: Use [newMethod] instead._
@deprecated
oldMethod();
// bad
@deprecated
/// _Deprecated: Use [newMethod] instead._
oldMethod();