一个档次代码可能途经多少个开发者之手

前言

关于代码规范这几个话题就比较常见,没有绝对的对与错,唯有绝对的好与坏。

每个人都有和好的编码习惯,可是考虑到团体开发、项目中期的维护性上面,我以为依旧很有必要定一个代码规范的,不然项目越到末代越难保证

365体育网站,  本篇主要介绍JS的命名规范、注释规范以及框架开发的一些题目。

正文

怎么团队开发连接要扯到代码规范、Code Review
上边吧,因为各类开发者经验不一致,经历的条件差别,所养成的编码习惯自然也不平等

当今基本上项目都由四个人合营开发的,而且随着人口的流淌,一个门类代码可能途经多少个开发者之手,这几个时候,借使没有代码规范,那么些类型代码维护性、阅读性那几个方面就会比较担忧了

对于代码并从未什么样对与错之分,只要成功了种类的法力,你是用哪些方法形成的并不是很关键。毕竟软件是给用户使用的,用户并不会关怀你的软件底层达成逻辑,只要能协助解决用户蒙受的标题就好了。可是代码却有鲁棒性、松耦合/紧耦合这一个不相同,所以代码分好代码、坏代码
= =

好了 不扯那些虚的了,讲一下关于iOS 项目工程中的一些正经难点呢

目录

1.
取名规范:介绍变量、函数、常量、构造函数、类的成员等等的命名规范

2.
申明规范:介绍单行注释、多行注释以及函数注释

3.
框架开发:介绍全局变量争辩、单全局变量以及命名空间

 

工程中的文件层次

  1. 率先全体要用真实目录,不然表面上层级很分明,其实如故乱的一团
  2. 对此项目文件夹用业务模块来分别,因为是集体模块开发,这样子能够裁减难题域;对于模块的复用迁移也是很便宜的
  3. 合理的目录分层,尽量多去做分层,把公文安插在应当在的地方,那样子对于管理也是相比便于的,比如弄个ThirdComponents
    专门来保管第三方框架的,那样子就很明白的可以知晓这么些工程到底用到了如何第三方框架,便于升级和管制
  4. 把Resources
    文件夹打散,下降到每个模块文件夹中,那样子在模块的迁移的时候不会遗漏资源文件,而且对于每个模块资源大小也得以控制,可以检测到到底是哪些业务模块将包大小搞大了
  5. 尽量不要创造Common、Core
    这个文件夹,因为那样子会导致如拾草芥工具类在中间,没人维护,宁愿抽出来做组件都好

1. 命名规范

支出中的规范

  1. 集合命名规范

    命名尽量使用英文名称

    名称一定要浮现真实的功能意义

  2. Controller控制器的命名

    动用驼峰命名法,首字母大写,Controller结尾

    例如: PXYTradeViewController

  3. Util工具类的命名

    应用驼峰命名法,首字母大写,Helper结尾

    例如:PXYStringHelper

  4. View界面类的命名

    行使驼峰命名法,首字母大写,View结尾

    例如:PXYTradeView

  5. Plugin插件类的命名

    应用驼峰命名法,PXYPlugin起始,6位成效号最终

    例如:PXYPlugin100001

  6. Delegate协议接口类的命名

    行使驼峰命名法,首字母大写,Delegate结尾

    例如:PXYServerDelegate

  7. Service业务服务类的命名

    应用驼峰命名法,首字母大写,Service结尾

    例如:PXYTradeService

  8. 评释规范

    复杂的函数须要写注释,可是那一个对于通用的函数就不用写注释了,反而会传染代码,注释的话统一用系统的神速键来成立

  9. 代码中尽量不要有冗余的代码,当时调试时候注释的代码,之后须求把不用的笺注代码删除,文件中尽量删除没用的变量和函数,多余的换行

  10. 在头文件中表达下这一个类的效应

  11. 打印日志的时候 禁止使用NSLog 要动用自定义的Log,幸免Log 上生产

  12. 代码里面禁止利用 #if 0 #elif 1 #endif 之类的 难以阅读调试

  13. 发通报的Name,缓存的Key 要用宏或者静态变量,不要直接使用字符串

  14. 并非有无谓的空格 换行之类的

驼峰式命名法介绍:

驼峰式命名法由小(大)写字母开首,后续种种单词首字母都大写。

依据首个假名是或不是大写,分为:

Pascal Case 大驼峰式命名法:首字母大写。eg:StudentInfo、UserInfo、ProductInfo

Camel Case 小驼峰式命名法:首字母小写。eg:studentInfo、userInfo、productInfo

最后

实在那种代码规范上网一搜一大把,那里就不难列举自己蒙受的标题,须要详细的上网搜一下就好了。规范定下来了,接下去就是执行了,一伊始容许会不太习惯,但是坚定不移了一段时间,就会觉得还好了。

1.1 变量

取名方式:小驼峰式命名法。

命名规范:前缀应当是名词。(函数的名字前缀为动词,以此区分变量和函数)

取名提出:尽可能在变量名字中呈现所属体系,如:length、count等代表数字类型;而富含name、title表示为字符串类型。

示例:

// 好的命名方式
var maxCount = 10;
var tableTitle = 'LoginTable';

// 不好的命名方式
var setCount = 10;
var getTitle = 'LoginTable';

 

1.2 函数

命名方式:小驼峰式命名法。

命名规范:前缀应当为动词。

取名提出:可采纳大规模动词约定

  动词   含义 返回值
can 判断是否可执行某个动作(权限) 函数返回一个布尔值。true:可执行;false:不可执行
has 判断是否含有某个值 函数返回一个布尔值。true:含有此值;false:不含有此值
is 判断是否为某个值 函数返回一个布尔值。true:为某个值;false:不为某个值
get 获取某个值 函数返回一个非布尔值
set 设置某个值 无返回值、返回是否设置成功或者返回链式对象
load 加载某些数据 无返回值或者返回是否加载完成的结果

示例:

// 是否可阅读
function canRead() {
    return true;
}

// 获取名称
function getName() {
    return this.name;
}

 

1.3 常量

命名形式:名称全部大写。

命名规范:选用大写字母和下划线来组合命名,下划线用以分割单词。

命名提出:无。

示例:

var MAX_COUNT = 10;
var URL = 'http://www.baidu.com';

 

1.4 构造函数

介绍:在JS中,构造函数也属于函数的一种,只可是选拔new
运算符创设对象。

命名格局:大驼峰式命名法,首字母大写。

取名规范:前缀为名称。

命名指出:无。

示例:

function Student(name) {
    this.name = name;
}

var st = new Student('tom');

 

1.5 类的积极分子

类的成员包括:

① 公共性质和方法:跟变量和函数的命名一样。

② 私有属性和措施:前缀为_(下划线),后边跟国有性质和方法同样的命名格局。

示例:

function Student(name) {
    var _name = name; // 私有成员

    // 公共方法
    this.getName = function () {
        return _name;
    }

    // 公共方式
    this.setName = function (value) {
        _name = value;
    }
}
var st = new Student('tom');
st.setName('jerry');
console.log(st.getName()); // => jerry:输出_name私有变量的值

 

2. 诠释规范

JS援救两种不一样档次的评释:单行注释和多行注释。

2.1 单行注释

说明:单行注释以多个斜线开头,以行尾截止。

语法:// 那是单行注释

拔取格局:

① 单独一行://(双斜线)与注释文字里面保留一个空格。


在代码后边添加注释://(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字里面保留一个空格。

③ 注释代码://(双斜线)与代码之间保留一个空格。

示例:

// 调用了一个函数;1)单独在一行
setTitle();

var maxCount = 10; // 设置最大量;2)在代码后面注释

// setName(); // 3)注释代码

 

2.2 多行注释

说明:以/*开头,*/结尾

语法:/* 注释表达 */

采纳办法:

① 若开始(/*)和结束(*/)都在一行,推荐使用单行注释。


若至少三行注释时,第一作为/*,最终表现*/,其余行以*千帆竞发,并且注释文字与*保留一个空格。

示例:

/*
* 代码执行到这里后会调用setTitle()函数
* setTitle():设置title的值
*/
setTitle();

 

2.3 函数(方法)注释

说明:函数(方法)注释也是多行注释的一种,不过包涵了超常规的注释需求。

语法:

/**
* 函数表明 
* @关键字 
*/

常用注释关键字:(只列出一些,并不是任何)

注释名 语法 含义 示例
@param @param 参数名 {参数类型}  描述信息 描述参数的信息 @param name {String} 传入名称
@return @return {返回类型} 描述信息 描述返回值的信息 @return {Boolean} true:可执行;false:不可执行
@author @author 作者信息 [附属信息:如邮箱、日期] 描述此函数作者的信息 @author 张三 2015/07/21 
@version @version XX.XX.XX 描述此函数的版本号 @version 1.0.3
@example @example 示例代码 演示函数的使用 @example setTitle(‘测试’)

示例:

/**
* 合并Grid的行
* @param {Grid} grid 需要合并的Grid
* @param {Array} cols 需要合并列的Index(序号)数组;从0开始计数,序号也包含。
* @param {Boolean} isAllSome 是否2个tr的cols必须完成一样才能进行合并。true:完成一样;false(默认):不完全一样
* @return void
* @author polk6 2015/07/21  
* @example
* _________________                             _________________
* |  年龄 |  姓名 |                             |  年龄 |  姓名 |
* -----------------      mergeCells(grid,[0])   -----------------
* |  18   |  张三 |              =>             |       |  张三 | 
* -----------------                             -  18   ---------
* |  18   |  王五 |                             |       |  王五 |
* -----------------                             -----------------
*/
function mergeCells(grid, cols, isAllSome) {
    // Do Something
}

更多注释内容,可参看JSDOC :http://usejsdoc.org

 

3. 框架开发

3.1 全局变量争执

  在团队支付如故引入第三方JS文件时,有时会造成全局对象的名号争论,比如a.js有个全局函数sendMsg(),b.js也又有个全局函数sendMsg(),引入a.js和b.js文件时,会促成sendMsg()函数争辨。

示例:

 365体育网站 1

 

3.2 单全局变量

  所成立的大局对象名称是绝世的,并将具有的机能代码添加到那个大局对象上。调用自己所写的代码时,以那个大局对象为入口点。

如:

* JQuery的全局对象:$和JQuery

* ExtJS的全局对象: Ext

示例:

365体育网站 2

 

3.3 命名空间

  在项目规模日益壮大时,可利用命名空间形式对JS代码举行规范:即将代码根据效益拓展分组,以组的款型附加到单全局对象上。

以Ext的chart模块为例:

365体育网站 3

 

End

Web开发之路种类文章

菜单加载中…

相关文章