zoukankan      html  css  js  c++  java
  • 代码规范问题

    关于代码规范,大同小异。

    今天就对代码规范来个简单的概述,意见不同的,欢迎讨论:

    说明:编码遵循简单,直观,清晰的原则,才能易读、易维护。最重要的是养成经常做注释的良好习惯。

    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的 命名。

  • 相关阅读:
    NHibernate使用之详细图解
    iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)
    设置devenv命令的启动版本
    NBear简介与使用图解
    jQuery 插件取url参数[jquery.url.js]的使用以及文件下载
    Ajax跨子域
    XML 通用操作
    NVelocity标签使用详解
    Visual Studio 2010 中JS注释制作
    windows自定义快速启动(运行)命令
  • 原文地址:https://www.cnblogs.com/isItOk/p/8550989.html
Copyright © 2011-2022 走看看