提高代码质量:如何编写函数
Posted coder_up
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提高代码质量:如何编写函数相关的知识,希望对你有一定的参考价值。
1. 命名
1. 帕斯卡命名法
- 帕斯卡命名法简单地说就是:多个单词组成一个名称时,每个单词的首字母大写。比如:
class Person
这种命名法常用于类名定义
2. 驼峰命名法
- 驼峰命名法和帕斯卡命名法很类似,多个单词组成一个名称时,第一个单词全部小写,后面单词首字母大写。比如:
var sendMessage = function () ;
var calculatePrice = function () ;
驼峰命名法一般用于字段、局部变量、函数参数,属性等等。
2. 什么时候命名
- 当你无法命名一个函数时,应该分析一下,这个函数的编写是否科学,有什么办法可以去优化它。
3. 不要采用太抽象广泛的单词
比如get这个单词,大家都知道这个是获取数据的,但是每一种方式都用get就有点太抽象了,以下具体情况具体分析下,列举了一些例子,当然还是要多阅读优秀的源代码:
1 简单的返回数据
function getFullName()
2. 从远程获取数据
function fetchPerson()
3. 从本地存储加载数据
function loadPerson()
4. 通过计算获取数据
function calculateTotal()
5. 从数组中查找数据
function findName($arr)
6. 从一些数据生成或得到数据
function createSth(data)
function buildSth(data)
function parseSth(data)
4. 一些常用的对仗词
add/remove increment/decrement open/close
begin/end insert/delete show/hide
create/destory lock/unlock source/target
first/last min/max star/stop
get/put next/previous up/down
get/set old/new
5. 根据不同项目和需求制定好命名规则
- 比如我们通常采用的命名规则是动宾结构,也就是动词在前,名词在后,但是有一些项目,比如
数据接口
等项目中,一般都是名词在前,动词在后的形式,例如:
public static Product[] ProductsGet();
public static Product[] ProductsDel();
public static Customer[] CustomerDel();
public static Customer[] CustomerDel();
- 这种的好处是看到前面的名词,比如ProductsGet,就能很快的知道这是产品相关的数据接口。
6. js中的多参数函数的变化
var filterHotel = function (city, checkIn, checkOut, price, star, position, wifi, meal, sort, pageIndex)
参数太长可写成如下形式:
function DatePlace (city, checkIn, checkOut)
this.city = city;
this.checkIn = checkIn;
this.checkOut = checkOut
function HotelFeature (price, star, position, wifi, meal)
this.price = price;
this.star = star;
this.position = position;
this.wifi = wifi;
this.meal = meal;
var filterHotel = function (datePlce, hotelFeature, sort, pageIndex) ;
- 将多个参数提取成对象了,虽然对象数量增多了,但是函数参数更清晰了,调用起来也更方便了。
7. 尽量不要使用bool类型作为参数
有的时候,我们会写出使用bool作为参数的情况,比如:
var getProduct = function(finished)
if(finished)
else
// 调用
getProduct(true);
- 如果没有注释,使用者看到这样的代码:getProduct(true),他肯定搞不清楚true是代表什么意思,还要去查看函数定义才能明白这个函数是如何使用的。这就意味着这个函数不够清晰,就应该考虑去优化它。
通常有两种方式去优化它:
-
- 1.将函数一分为二,分成两个函数
getFinishedProduct
和getUnFinishedProduct
- 1.将函数一分为二,分成两个函数
-
- 2.将bool转换成有意义的枚举getProduct(
ProductStatus
)
- 2.将bool转换成有意义的枚举getProduct(
8. 不要修改输入参数
- 如果输入参数在函数内被修改了,很有可能造成潜在的bug,而且使用者不知道调用函数后居然会修改函数参数。
- 正确使用输入参数的做法应该是只传入参数用于函数调用。
- 如果不可避免地要修改,一定要在注释中说明。
9. 尽量减少代码嵌套
我们平时写if,switch或for语句是常有的事儿,也一定写过多层if或for语句嵌套的情况,如果代码里的嵌套超过3层,阅读起来就会非常困难了。我们应该尽量避免代码嵌套多层,最好不要超过2层。下面我来说说我平时一些减少嵌套的技巧或方法。
- 如果符合某个条件下可以直接终止函数,则应该将这个条件放在第一位。我们来看看下面的例子。
if(condition1)
if(condition2)
if(condition3)
else
return;
else
return;
else
return;
改写后:
if(!condition1)
return;
if(!condition2)
return;
if(!condition3)
return;
//doSth
这段代码中,我们把condition1等于false的语句提取到前面,直接终止函数,将多层嵌套的if语句重构成只有一层if语句,代码也更清晰了。
注意:
一般情况下,我们写if语句会将条件为true的情况写在前面,这也比较符合我们的思维习惯。如果是多层嵌套的情况,应该优先减少if语句的嵌套
10. 总结
- 准确地对变量、函数命名
- 不要有重复逻辑的代码
- 函数的行数不要超过20行,这里的20行只是个大概,并不一定是这个数字
- 减少嵌套
以上是关于提高代码质量:如何编写函数的主要内容,如果未能解决你的问题,请参考以下文章