Cocoa代码风格指南之注释规范(三)

写代码注释是十分重要的一件事。如果你的代码维护或迭代的代价很大,那对接手你代码的人可能会十分痛苦。好的注释能够一定程度上解决这一问题,这也是一个码农的基本素养。但是,注释并不是越多越好。好的代码应该是能够自我解释的。Objective-C 语法中的方法名本身就对其中的参数进行了解释,所以在写注释之前最好先检查下自己命名的问题,想想这些注释是不是有必要的。对一些简单的变量、方法和逻辑,是不需要注释的,这种注释只会分调用者的注意力。注释应该只在如下场景中出现。

  1. 解释实现文件中复杂的逻辑
  2. 对代码进行标注
  3. 对接口进行说明

解释实现文件中复杂的逻辑

在实现文件中,有时候会有一些复杂的逻辑,这种情况通过看代码去理解代价往往很大。如果不写备注,可能以后连自己都很难维护。所以,就算现在你对这些代码的逻辑有很清晰的理解,也最好写上备注,因为以后你肯定会忘记。这种注释由于不需要文档化,也不需要联想,所以使用 C/C++ 的注释风格就可以。当然如果你有文档化的需求,那还是按照统一的注释风格。

// 这是注释
/* 这是也是注释 */

对代码进行标注

在程序中,我们见过最多的注释莫过于//TODO了。这种注释如果在后边加上“:”就能在方法列表中显示,效果类似于#pragma mark。Xcode支持类似功能的注释有如下几种。

//MARK:MARK
//TODO:TODO
//FIXME:FIXME
// !!!:!!!
//???:???

这样的注释能够起到对代码进行标记的作用。比如项目中如果存在还没有完成的功能就可以加上//TODO:Response button event。如果某块代码需要修改,可以加上//FIXME:There is a problem on iOS7。如果你需要警告他人// !!!:DO NOT TOUCH MY CODE!。或者你对哪里的代码有不解(不满)//???:What is this shit。如果你想在方法内部实现像#pragma mark一样的标注,就可以使用//MARK:Initialization,是的,就是这么简单。如果你很另类,你还可以这样来注释代码。

对接口进行说明

当我们封装库或在开发较复杂的项目时,因为接口需要供多人使用,所以对接口的注释说明就十分重要。

从注释生成文档

复杂的接口注释有时候生成文档会更方便查看。对于程序设计的文档,业界的标准做法都是自动生成。一般我们会将文档嵌入地以某种规范的格式以注释的形式写在实际代码的上方,这样文档的自动生成器就可以扫描源代码并读取这些符合格式的注释,最后生成漂亮的文档了。Java语言本身就自带 JavaDoc 命令,可以从源码的注释中抽取文档。对于 Objective-C 来说,这方面的自动生成工具有 Apple 标准的 HeaderDoc,以及第三方的 AppleDoc 或者 Doxygen 等。它们分别的官方网址如下。

Docxygen 支持的语言最多,可以配置的地方也比较多。但是默认生成的风格与苹果的风格不统一。HeaderDoc 是 Xcode 自带的文档生成工具。在安装完 Xcode 后,就可以用命令行headerdoc2html + 源文件名来生成对应的文档。不过 HeaderDoc 的注释生成规则比较特别,只生成以/*! */的格式的注释。还有一个缺点是每个类文件对应一个注释文件,没有汇总的文件。而 AppleDoc 是在 StackOverflow 上最被大家推荐的。它默认生成的文档风格和苹果的官方文档一致。它还可以生成 docset 并集成到 Xcode 中。这样在源码中使用 Alt + 双击 就可以进入文档查看了。相对于 HeaderDoc,它没有特殊的注释要求,可以用/** */的格式,也可以兼容/*! */的格式的注释,并且生成的注释有汇总页面。

注释通用格式

从 Xcode5 开始,IDE 默认集成了提取文档注释并显示为 Quick Help 的功能,从那以后,能被 Xcode 识别的文档注释就成为了事实上的行业标准。当我们按照Xcode支持的规则写注释的时候,就可以通过Alt + 单击的方式唤起 Quick Help。而且在 Xcode 自动联想时也能看到对应的注释。如果使用 AppleDoc 生成并集成了文档,还可以Alt + 双击进入说明文档。由于 Xcode Quick Help,Docxygen,HeaderDoc 和 AppleDoc 都有自己的规则。下边就简单介绍一些常用的且兼容性强的规则。更详细的说明可以分别访问他们的官方网站或者本篇的参考文献。

首先,由于 HeaderDoc 只支持这样/*! */一种格式的的注释,所以如果你想用 HeaderDoc,就可以跳过下边这一段了。

先说行尾注释。生成文档的话,只有Docxygen是支持行尾注释的。但是所幸 Xcode Quick Help 的支持让我们有了使用的理由。

/**< 行尾注释1. AppleDoc 不支持会变为下一项的注释, Quick Help 支持,Doxygen 支持, 根据英文句号自动切分简要描述与详细描述. */
/*!< 行尾注释2. AppleDoc 不支持会变为下一项的注释, Quick Help 支持,Doxygen 支持, 会全部当作详细描述, 而缺少简要描述. */
///< 行尾注释3. AppleDoc 不支持会变为下一项的注释, Quick Help 不支持, Doxygen 支持。
//!< 行尾注释4. AppleDoc 不支持会会忽略, Quick Help 支持, Doxygen 支持。

为了避免 AppleDoc 误将行尾注释当作下一项的注释,故推荐第4种注释//!<。行首的单行注释除了 HeaderDoc 外,其他都是支持///的。但是,你如果使用了这样格式的行首单行注释,那用 HeaderDoc 生成文档时就会报错Skipping. No HeaderDoc comments found.。行首的多行注释除了 HeaderDoc 外,其他也都是支持/** */这样格式的。同样,这样的注释 HeaderDoc 也无法生成文档。综上,如果你想要使用 HeaderDoc ,就老老实实都用/*! */写在行首。如果你放弃了 HeaderDoc ,那你就可以使用如下更通用的注释方式。如果你使用的是AppleDoc, 则要避免使用行尾注释。

  • 行首单行注释///
  • 行尾单行注释//!<
  • 行首多行注释/** */

通用二级标签

多行注释中是支持二级标签的。Xcode 基本支持所有的二级标签颜色加深的功能。二级标签可以在生成文档、联想和使用 Quick Help 时显示。不加任何标签的情况的下生成文档,单行注释默认为简要描述。多行注释默认为详细描述。在使用多行注释的时候也可以在不加标签的情况下同时生成简要描述和详细描述。使用单行注释时,只有 Doxygen 会根据英文句号自动切分简要描述与详细描述。

/** 简要描述
 * 详细描述
 */
///简要描述.详细描述

多行注释中的简要描述也可以用@brief来代替。除此之外还有很多支持的二级标签。这里列举一些 AppleDoc 和 Doxygen 均支持的常用二级标签。

/**
 * @brief <title>: 简要注释. appledoc中仅对属性、方法有效,对类、协议 无效,会造成后续内容解析失败.
 * @param <name> <description>: 参数描述.
 * @return <description>: 返回值描述.
 * @exception <name> <description>: 异常描述.
 * @see <name>: 参见.
 * @sa <name>: 参见. 同@see.
 * @warning <text>: 警告.
 * @bug <text>: 警告.
 * @name <title>: 组名. 用于给成员们分组, 既文档中Tasks区的子类别.
 * 代码块 `int sum = 0;`
 * 多行代码块:
 *     int sum = 0;
 *     for(int i = 1; i <= 10; i++) {
 *         sum += i;
 *     }
 * 无序列表:
 * - first
 * - second
 * - third
 * 有序列表:
 * 1. first
 * 2. second
 * 3. third
 * 多级列表:
 * - abc
 *    - a
 *    - b
 *    - c
 * - rgb
 *    - red
 *        1. first.
 *            1. alpha.
 *            2. beta.
 *        2. second.
 *        3. third.
 *    - green
 *    - blue
 * 链接:
 * <http://www.xuyafei.cn>
 * [xuyafei](<http://www.xuyafei.cn>)
 */

下边是 Quick Help 支持的常用二级标签。

/**
 * @brief It converts temperature degrees from Celsius to Fahrenheit scale.
 * @param  fromCelcius The celsius degrees value.
 * @return float The degrees in the Fahrenheit scale.
 * @code
 *     float f = [self toCelsius:80];
 * @endcode
 * @remark This is a super-easy method.
 */
note_quick_help.png

* appledoc的安装与使用

git clone git://github.com/tomaz/appledoc.git
cd appledoc
sudo sh install-appledoc.sh

appledoc -o 导出目录 -p "项目名称" -c "公司名称" .

博客:xuyafei.cn
简书:jianshu.com/users/2555924d8c6e

微博:weibo.com/xuyafei86
Github:github.com/xiaofei86

参考资料

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

推荐阅读更多精彩内容

  • 前言 在一个应用的整个开发过程中涉及到了无数的步骤。其中一些是应用的说明 , 图片的创作 , 应用的实现 , 和实...
    与伟大LEE同行阅读 3,898评论 3 6
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 身边有很多人,抱着这样的心态步入婚姻—— “周围的人都结婚了,我不能再拖了!” “对方有房有车,条件还不错,那就结...
    她他社阅读 368评论 0 0
  • 听了两位新晋小花教师的课,谈谈自己的感受。 体育罗老师的体态和姿势都是有氧运动, 示范动作举手...
    方圆_22cf阅读 213评论 0 0
  • 你是我最折腾 最美的青春 走到今天 就到这里 然后跟着红眼一并搁浅 我 和 你 两个故事 ​​​
    她好像条狗阅读 125评论 0 0