ch1编程之道--代码风格的重塑

上传人:宝路 文档编号:54415410 上传时间:2018-09-12 格式:PPT 页数:53 大小:1.19MB
返回 下载 相关 举报
ch1编程之道--代码风格的重塑_第1页
第1页 / 共53页
ch1编程之道--代码风格的重塑_第2页
第2页 / 共53页
ch1编程之道--代码风格的重塑_第3页
第3页 / 共53页
ch1编程之道--代码风格的重塑_第4页
第4页 / 共53页
ch1编程之道--代码风格的重塑_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《ch1编程之道--代码风格的重塑》由会员分享,可在线阅读,更多相关《ch1编程之道--代码风格的重塑(53页珍藏版)》请在金锄头文库上搜索。

1、第一章 编程之道代码风格的重塑,陈闻杰 华东师范大学软件学院,Linux高级编程与企业软件开发,Any fool can write code that a computer can understand. Good programmers write code that humans can understand. - Martin Fowler,Agenda,1.1 为什么要规范代码风格 1.2 常用的几种代码风格 1.3 deWiTTERS 风格基本规则 1.4 代码风格的内容 1.4.1 标识符的命名规则 1.4.2 代码布局 1.4.3 注释,1.1 为什么要规范代码风格,计算机科学

2、,计算机文化,计算机技术,计算机艺术 正确和规范的关系。,1.2 常用的几种代码风格,K&R风格 BSD风格 GNU风格 Windows风格 deWiTTERS 风格,1.3 deWiTTERS 风格,deWiTTERS 风格的基本规则有3条: 1)尽量可理解 2)尽量可读,除非与以上规则矛盾 3)尽量简单,除非与以上规则矛盾 反过来说,我们写一段程序要尽量简单,除非影响到了它的可读性和可理解性。 代码风格和具体使用的编程语言有关,但基本规则是不变的。,1.4 代码风格的内容,哪些属于语言定义?哪些属于代码风格? 正确 vs 规范 标识符的命名规则 变量名、常量名、宏名、函数名、类型名、类名、

3、对象名、方法名 文件名、模块名、项目名 提交安装文件或文档的命名 布局(布白) 缩进 空格,空行 花括号的位置和对齐,注释 版权注释 文件版本历史 文件或模块的功能 函数注释 函数内注释 文件结构和项目结构 一个项目划分成几个文件 文件的组织,1.4.1 标识符的命名规则,标识符 包括标签(label),函数名(function name),宏名,常量名,变量名,宏名,以及文件名,模块名。 1. 用英语,要求准确,简单,专业。 避免拼音,避免容易误解的多义词 2. 根据情况是否用缩写。 用单词的前面部分缩写,可以不必管词性(名词,形容词,动词),单复数,时态等。但有时也可能因此带来不便。,缩写

4、,函数名,变量名不是非常必要缩写的不用缩写。 缩写分为: 1。字头缩写(Acronyms), 宜用大写。如 HECO. _HECO_. 必要情况下可以用小写。如果作为一个很著名的,有明确含义的缩写,如HECO,则用缩写比不用缩写更清楚。 2。长单词缩短:有几个原则: a)通用,如 temp表示 临时,则表示温度时应用全称temperature或 temper b)同一个模块(项目,文件,函数。)应保持一致。 c)7个字母以下的单词通常不缩写。 d)用单词的前一部分 e)用辅音字母。 d和e通常只选择一个。并且以d为好,因为用grep搜索单词的前面部分可以搜索出所有经过和没有经过缩写的单词。,缩

5、写 (cont.),缩写宜遵从约定或惯例。 固定含义的缩写 temp tmp 表示 temporary temporarily 可以用temper表示 temperature com 通常表示 communicate/communication comp (或cmp)表示compare/comparation 函数内部的局部变量(作用范围很小,或者函数很小)可以用缩写,如 index缩写为 idx,count缩写为cnt等。 但对于较长的函数,用全称可能更清楚。,缩写 (cont.),以下为不好的例子: axGetCellInstMasterByName() axuGetPortInstMst

6、ByName() 同一个文件中Master既有缩写,又有不缩写的。,全局变量,局部变量,参数,全局变量,局部变量,参数。 标识符包括 标签(label),函数名(function name),宏名,常量名,变量名,宏名,以及文件名,模块名。 变量名有 全局变量,局部变量(函数内部),参数名。 最好在命名时有所区别。 全局变量:尽量避免使用。如果需要,将一个模块内所有全局变量集中在一起。 参数: 需要与局部变量能区分开来,尤其是函数较大的时候。 _IN _OUT _INOUT 局部变量:,变量命名惯例,尽量避免使用 number这个有歧义的词。 序号 index 总数(计数) count 唯一标

7、识 ID 大小 size 长度 length 或 len 但有些固定的用法,比如行号 lineNumber 好像还是 沿用旧例 LineNum 或 LineNo.,变量命名惯例 (cont.),._name 表示字符串类型,不必说明 String flatPortName, flatCIPath, flatCIName, flatNetPath, flatNetName; flatCIPath, flatNetPath 是不好的风格,应该保持一致,使用 flatCIPathName, flatNetPathName 或者假定path一定是pathname, 是字符串,也可以。,变量命名惯例 (

8、cont.),总数和数组 用 aaa_count 表示总数 用aaas (复数)表示数组 如 int book_count 表示 书籍册数, Book books 表示书的数组。? 集合?,大小写和连字符,大小写的使用是代码风格的重要体现。不同风格中有不同的大小写使用方法。如匈牙利命名法,Linux命名法等。 多单词的连接 (也有两种风格) 用大写字母连接(Windows风格) 如:penColor, GetName() 用下划线连接(Linux 风格) 如:pen_color, get_name(),大小写和连字符(cont.),对于单词较多的,用下划线似乎看起来更清楚。 下划线的好处是可以

9、区分一些大写的缩略语。 另外,在两个紧凑到单词可以连在一起用大写字母区分,如: 原:axIterNextHierPortInstOnHierCellInst() ax_iter_next_HierPortInst_on_HierCellInst() (注),大小写和连字符(cont.),建议使用: 类型名:大写开头,不用下划线分隔单词 如:Color 变量名:小写开头,用下划线分隔单词【名词性词组】 如:color, pen_color 常数、枚举值:全大写,用下划线分隔单词 如 RED, GREEN 函数:小写开头,用下划线。 【动词性词组】 如 draw(), draw_circle()

10、宏定义:通常用大写,如果作函数用也可以用小写。 布尔型变量:aaa_is_bbb, aaa_has_bbb. 和结果为布尔型的函数:check_aaa_bbb(),大小写和连字符(cont.),微软的命名法: 用大写的C开头表示类。(Linux上用的较少) 匈牙利命名法(前缀古怪),函数内部的变量命名,1)惯例单字母变量如 i,j,k 用于循环的迭代 p,q 用于循环的指针。 2)如果仅有一个或两个单词(8个字母内),不加任何前缀,并可以使用缩写。 index 可以缩写成idx,(如果是不是函数内部变量不建议用缩写) count可以缩写成cnt, 适用于出现范围在10行代码之内。,函数内部的变

11、量命名(cont.),3)如果有三个单词以上或字母数较多,用下划线打头,表示是一个内部变量 linkChildCellInst_t *_child_CI_list=NULL; 如果不是函数内部变量,建议写成 child_CellInst_list ,或者再加一个前缀表示模块如 mw_child_CellInst_list 如果是C+的类的内部变量,可以用m打头表示member m_child_CellInst_list 按deWitters风格,也可写成 my_child_CellInst_list CellInst 是 cell instance 的缩写。同时使用大写区分和下划线区分,可以使

12、得专有名词紧凑在一起,提高可理解性。,函数内部的变量命名(cont.),同一个函数内避免一词多用, 比如 用 newPort 一会儿代表 parentNewPort,一会儿代表childNewPort。 宜用两个变量表示。 (除了单字母的i,j,k表示整数序数,p,q,r表示指针迭代,每次作用范围限于一个block中),函数名风格,函数名应该用动词或动词性词组。 大小写 (有两种风格) 一种是大写开头。 一种是小写开头。如果类定义用大写开头,则函数名用小写开头,与变量名一样,只是用动词。,函数名风格 (cont.),表示“动作”和表示“状态”要区分开来。 如new只表示形容词的意思,如果表示动

13、作,用 create, generate, establish,build,setup 等。 一些相对的词 get/set, add/remove, insert/delete, create/destroy, start/stop, increment/decrement, new/old, begin/end, first/last, up/down, next/prev, open/close, load/save, show/hide, enable/disable, resume/suspend,函数名风格 (cont.),_aaa 命名内部函数(辅助函数) 对于一个很大的函数(几百

14、行),如果可以,拆成几个小函数。 这些函数在别的地方不会被调用到(即为private函数),可以在函数名字前加下划线_, 以示区别,方便阅读。 或者说,内部函数(private,只在本文件(模块)内被调用,不会被其他模块调用,则使用下划线,代替模块的名字。 如 private void _ECO_change_C(char * line, String *strParam) . 而不用 private void axuhe_ECO_change_C(),1.4.2 代码布局,缩进 Tab indent。 Linus 推荐用8. 本人推荐用4。 并建议直接转换成空格符。 8是在较早的显示硬件基础

15、上的。 行宽 原来一般terminal只支持80个字符每行,但现在可以支持的比较多,所以每行100个字亦可,不必为了缩短,而强制换行。 但由于新的编辑环境通常有左边浏览栏,甚或右边也有一些快捷栏,所以长度也不可过长,如超过120个字符。,花括号,K&R风格: if () 以传说中的Kernighan & Ritchie之名命名,因他们的样例代码而被广为接受。又因Unitx内核使用这种风格,所以又被称作Kernel Style,也被它的信徒称作One True Brace Style。也因为C代码主要使用这种风格,也被其他类C语言的使用者称作C风格。这种风格的流行,一是因为大部分教学书籍使用这种风格以节约纸张成本,二是随着Java的普及而被广泛接受。 优点是代码相当紧凑,对低分辨率的显示器和打印文稿来说很有价值; 缺点是在有些情况下匹配大括弧有些困难,并且也因此产生很多子派别。如: if () else 与 if () else ,BSD风格: if () 以Berkeley黑客Eric Allman之名命名,也叫Ansi风格,大括弧独占一行。这是除了K 如果你无法忍受浪费的行,最好的办法就是用这些行来写注释。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号