内容简介:软件编程中命名随处可见, 如函数, 参数, 类名, 变量, 包名, 文件名等。一个好的命名能够望名知意, 方便后续的维护。下面是一些基本的关于命名的规则:
软件编程中命名随处可见, 如函数, 参数, 类名, 变量, 包名, 文件名等。一个好的命名能够望名知意, 方便后续的维护。
下面是一些基本的关于命名的规则:
-
命名语意化: 有意义的命名能够替代注释
-
避免误导性命名
1. 命名外形上的相似 如 数字0与字母O同时出现 变量xyzControllerForOrderOfSetting和xyzControllerForLoginSetting(需要花时间去区分) 2. 语义废话,含混不清的命名 如 同一个模块出现这样的方法或者命名(需要花时间去区分). getUserInfo/getUserData/getUser, userInfo/userData/user 复制代码
-
多使用能够读的出来的名称: 避免自造词, 多使用合乎规范的英文单词
-
使用易搜索的名称
1. 易搜索指的是在海量代码中快速定位到该命名 2. 以单个字母命名的名称仅适用于短方法中的本地变量(如js中d(document),w(window)) 3. 命名的长短应该与作用域大小成对应关系 复制代码
-
类名
类名与对象名应该是名词或者名词短语, 避免使用Processor, UserData等,类名不应该是动词 复制代码
-
方法名
方法名应该是动词或者动词短语 属性访问器,属性修改器,断言等应该加上get, set, is等前缀 复制代码
-
每个概念对应一个词, 并且一以贯之
举例说明: 比如你在一个类里面的同类型方法都是使用get作为前缀, 但是在另外一个类里面的方法又是使用fetch作为前缀。这就是没有保持一个概念一个词。 另外就是保持你的代码风格统一性 复制代码
-
避免使用双关语
避免同一个单词用于不同的目的,同一个术语用于不同的概念 复制代码
-
多使用大家达成统一认识的领域名称(术语)
举例说明 比如使用visitor(访问者)而不是accounrVistor Queue/jobQueue 复制代码
-
添加有意义的语境
大多数时候我们是没法通过命名达到自我说明, 这个时候就需要添加适当的语境来方便我们理解。 添加语境的方式就是给命名添加前缀。 createXxxx / addXxx / deleteXxx / updateXxx 复制代码
-
避免添加无意义的语境
当短名称足够描述清楚时候, 要优于长名称 复制代码
如何写好函数
-
短小
函数应该短小,不能太长, 20行封顶 复制代码
-
代码块和缩进
if语句,else语句,while语句,switch/case中子句等, 其中的代码块应该只有一行,该行也应该是一个函数调用语句。 例如: if (true) { // 函数调用 } else { // 函数调用 } 复制代码
-
一个函数应该只做一件事
当你的函数不能再被拆开一个函数时候就标示做了一件事 复制代码
-
一个函数一个抽象层级(抽象逻辑块)
代码应该保持一个自顶向下的阅读顺序。 每一个函数后面尽可能紧跟下一个抽象层级的函数 复制代码
-
switch语句
switch/case语句有多个子句时候,可以把switch语句置于抽象工厂中,不对外暴露,然后工厂方法中针对不同的case语句创建不同的实体 复制代码
-
使用描述性的名称
-
函数参数
1. 函数参数个数: 理想情况函数参数个数依次为0,1,2,超过两个应该避免 2. 当函数需要三个或者超过三个以上参数时候, 推荐把一些对象封装为类 3. 当我们需要传入个数可变的参数时候, 可以使用参数列表 复制代码
-
动词与关键词结合
-
对于一元函数时候, 我们可以使用动词与关键词结果方式来更好表述该函数的作用。 举例: writeField(name): => 修改字段name 复制代码
-
无副作用
虽然我们说函数只做一件事, 但是常常会隐式的做一些其他事情,导致异常的发生, 尤其像动态语言(Python,JavaScipt), 没有类型约束, 一不小心就修改了对象类型。 避免使用输出参数, 如果参数必须要修改某种状态,索性就修改所属对象的状态 复制代码
-
分隔指令与询问
函数要么做什么事情,要么回答什么事情,两者不可兼得。即 函数要么修改某对象的状态, 要么返回该对象的有关信息 复制代码
-
使用异常替代返回错误码
举例: 一个函数deletePage(page)用错误码标示执行的结果: E_OK / E_ERROR 如果你的代码中大量采用该风格的函数, 有时候会导致大量的if嵌套。 if (deletePage(page) == E_OK) { if (deletePerson(person) == E_OK) { } else { } } else { } 我们应该使用异常替代返回错误码的方式,这样错误处理代码就能把代码进行分离 try ( // 主路径代码 ) catch () { // 错误处理 } 复制代码
-
抽离try/catch代码块
函数应该只做一件事, 错误处理就是一件事 复制代码
-
DRY原则: 别重复自己
消除重复 => 提取代码中能复用的模块, 复用的类, 复用的方法等 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。