代码规范问题
关于代码规范,大同小异。
今天就对代码规范来个简单的概述,意见不同的,欢迎讨论:
说明:编码遵循简单,直观,清晰的原则,才能易读、易维护。最重要的是养成经常做注释的良好习惯。
oc代码:
一、 命名
1.1 常量:
可以写的比较随意,但是最好也用相应意思的英文来写,否则会很难读懂。
1.2 变量:
遵循驼峰命名法
UI控件,我们就要以“功能”+“类型”来命名,言简意赅,一眼就能看出来他的功能 。 如“待办”的表格用 toDoTableView。
如果是约束,以Const尾缀,最好写A的属性 To B的属性命名,如果是宽度,可以很简单,如C的宽度 = CWidthConst
如果是定义成员变量,记得前面加个下划线(这里注意成员变量和类的属性的区别)
1.3 属性
修饰属性的关键字:
block,NSString用copy
基本数据类型用assign
UI控件如果不是懒加载用weak,如果是懒加载用strong
对象(包括CALayer)属性用strong
readOnly(只读不能修改,其实用KVC都是可以赋值的)
1.4 方法名:
遵循驼峰命名法
避免方法的参数过多,一般最多为5个
如果方法有多个返回状态,尝试用enum作为返回类型
方法名不要用缩写,尽量表达方法操作的意思
1.5 通知:
使用“项目前缀”+“发出通知的类”+“did/will”+“动作”+“Notification”
如:
UIKIT_EXTERN NSString *const UIWindowDidResignKeyNotification; // nil
NSString *const SHUserDidLoginNotification = @"SHUserDidLoginNotification";//自定义的通知
1.6 代理:
“项目前缀”+"类名"+“Delegate”
1.7 类:
以项目的前缀开头
以类的作用+所属于的类型来命名
如:SHToDoCell, SHToDoController等
1.8 关于宏全部用大写,多个单词用下划线分隔或者用小写“k”开头后面遵循驼峰命名法进行定义。
1.9 名字清楚简单,让人一目了然,尽量用英文命名名字有意义,名字最好尽可能精确表达其内容,不可以用拼音代替
1.10 尽量选择通用词汇
1.11 避免用缩写,如果名字太长才在不引起歧义的前提下用缩写,当命名里出现缩写词时,缩写词全部大写
1.12 避免局部名和外层的名字冲突,避免方法里面的单词和参数名字相同
如 不可以写 -(void)showView:(UIView *)view name:(NSString*)name
可以写-(void)showView:(UIView *)view viewName:(NSString*)name
1.13 文件名:
“项目前缀”+"行为/属性"+"类型"命名,如:SHHomeViewController ZFoundTableViewCell
对于一个汉语有多个英文的名字要统一规定好,如交易就是transaction,说了就不要再用deal了
1.14 关于英语词性的选择(优秀的产品都应如此):
类和对象名应是名词
实现行为的类成员函数名应是动词
二、注释:
2.1 每个类应该在头文件中写上注释,如:
/*****************************************/
//类的中文名称
//类的作用
//这个类在什么情况下将被调用
/*****************************************/
2.2 每个类的每个函数前面应该都应该有注释,如:
/*****************************************/
//函数的中文名称
//函数的详细说明
//重要参数说明
//返回值说明
//测试代码(如果需要则注释上,方便日后单元测试)
/*****************************************/
2.3 每次做了修改,应该按照如下格式作出说明(一般这个用得不多,因为有svn等代码管理工具,可以很轻易的看到哪里改了,还可以很容易的回滚。但是不得不说如果一个工程这么写的话,即使将工程单独拿出来,不依靠svn 也可以很容易的被开发者读懂,可维护性更强)
/*****************************************/
//类型:修改;修改人:某某某;日期:2012.1.1
//修改原因:XXXXXXX
/**************/
//原代码不要删除,方便改错后恢复
/**************/
/*****************************************/
2.4 方法中重要的逻辑和语句要作注释
2.5 类的变量,宏,常量,枚举等应该有所说明
如:此变量作用是什么
2.6 程序中要注意用#pragma mark 来对程序进行分块以及注释
2.7 添加有必要的注释,尽可能使用Xcode注释快捷键(⌘⌥/)
三、方法:
3.1 避免函数的参数过多,一般最多为5个
如果是参数大于等于3个的方法,要去折行
3.2 如果函数有多个返回状态,尝试用enum作为返回类型
3.3 规模不能太大,尽量控制在200行代码之内,重复使用的代码抽象成函数
3.4 空行的使用:
在操作符前后加空格
文件中的主要部分用空行分开
方法之间要用两个空行分开
用空行将代码按逻辑片断划分
理论上每一行不超过一屏幕
不要在一行中放多于一条语句
3.5 语句switch中的case按字母顺序排列
3.6 不可将布尔变量和逻辑表达式直接与YES、NO或者1、0进行比较。
如: 设bFlag 是布尔类型的变量 可以写
if (bFlag) // 表示flag为真
if (!bFlag) // 表示flag为假
不要写:
if (bFlag == TRUE)
if (bFlag == 1)
if (bFlag == FALSE)
if (bFlag == 0)
3.7 不可将浮点变量用“==”或“!=”与任何数字比较。
说明:无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该转化成“>=”或“<=”形式。
如:可以写
if ((fResult >= -EPSINON) && (fResult <= EPSINON))
不可以写: if (fResult == 0.0)
其中EPSINON是允许的误差(即精度)
3.8 优先考虑用代码代替xib,代码直观,且实现容易移植。xib和storyboard更耗费内存。但是swift中例外,因为苹果在swift中主推storyboard编程
四、类:
4.1 提高类内的聚合度
4.2 降低类间的耦合度
4.3 限制继承的层数,一般最大为5
4.4 尽量不要将基类(父类)强制转换成派生类(子类)
4.5 对于功能相似的两个类注意抽取出父类
swift代码:
从oc转swift 会有很多的需要注意的地方,如下
一、命名
参考上面oc的 命名。
二、注释
参考上面oc的 命名。
swift中不用 #pragma mark
而是使用 // MARK: -,按功能、协议、代理等分组
// MARK: - private
// MARK: - click
// MARK: - loadData
三、函数
在swift中 大家大多都叫函数了,不叫方法了
参考上面oc的 命名。
需要注意的是swift中:
判断语句不用加括号
如:
if typeValue == 1 {
}
在访问枚举类型时,使用更简洁的点语法
let color = UIColor.red
当对外接口不兼容时,使用@available(iOS x.0, *) 标明接口适配的起始系统版本号
@available(iOS 8.0, *)
func myFunction() {
}
没条语句后面不要加分号
bool类型命名时,使用is作为前缀 var isMine: Bool = false
当函数的第一个参数构成整个语句的介词时(如,at, by, for, in, to, with 等),为第一个参数添加介词参数标签
func login(with username: String?, password: String?){
}
可选类型拆包取值时,使用if let 判断
if let data = result.data {
}
多个可选类型拆包取值时,将多个if let 判断合并
if let name = person.name, let age = person.age {
}
避免使用 as! 或 try! 而是使用if let as?判断
if let name = person.name as? String {
}
组和字典变量定义时需要标明泛型类型,并使用更简洁清晰的语法
var names: [String] = []
var values: [String: Int] = [:]
var person: [String: Any] = [:]
四、类
参考上面oc的 命名。
posted on 2016-02-25 23:14 🌞Bob 阅读(442) 评论(0) 编辑 收藏 举报