代码整洁

Posted gxz_sw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码整洁相关的知识,希望对你有一定的参考价值。

整洁的代码能够提高项目的可读性、可维护性、可扩展性,这二天大致看了一本书代码整洁之道,粗略的看了一遍,总结了一下,写下来作为以后做项目的时候的参考。

代码的整洁简单的总结二种分类:

1.命名

?有意义命名

说明:变量、函数、类的命名应该答复了所有的大问题,应该告诉你他为什么会存在,他做什么事情,应该怎么用。如果命名需要注释来补充,就不是好的命名。长名称胜于短名称。

?变量前缀尽量不要有

 

说明:人们读代码的时候会无视前缀(或后缀),只看名称中有意义的部分。例如:m_name 这个名称m前缀无任何意义,单价看到也不知道什么意思。

?类名尽量用名词,而方法名要用动词。

?用命名常量替代魔术数字

 

2.类和函数

. 函数尽量短小、类尽量少、函数尽量少。

  函数20行封顶最佳

 

函数只做一件事情

下面我们看一下二个代码例子来做个比较

例1:

Public  Money calculatePay(Employee e){
    Switch(e.type){
        Case COMMISSIONED
            Return calculateCommissionedpay(e);
        Case Hourly:
            Return calculateHourlyPay(e);
    }
}

 

 

例2:

Public abstract class Employee{
        Public abstract Boolean isPayday();
        Public abstract Money calculatePay();
        Public abstract void deliverPay(Money pay);
}

Public interface EmployeeFactory{
    Public Employee makeEmployee(EmployeeRecord r);
}

Public class EmployeeFactoryImpl implements mployeeFactory{
    Public Employee makeEmployee(EmployeeRecord r){
        Switch(r.type){
        Case COMMISSIONED
            Return  new CommissionedEmployee(r);
        Case Hourly:
            Return new HourlyEmployee(r);

            }
      }
}

 

 

 例2显然比例1更好,

例1:一个函数中做了二件事情,可扩展性不好。如果e.type增加了一种雇员类型的话,是不是需要进行修改代码,增加一个计算方法进行计算支付金额。

例2:通过该函数,生成一个雇员,在通过雇员对象来得到应该付给该雇员金额,如果需要增加其他类型雇员,那么只用扩展程序,扩展一个新类型的雇员继承Employee就可以了, 面向对象编程对修改关闭对扩展开发。

 

. 函数参数数量尽量少

描述:最理想的是零参数,其次是一个参数,再次是二个,尽量避免三个以上参数。

 

. 无副作用

函数承诺只做一件事情,但是还是会做其他隐藏起来的事情,这样会导致古怪的时序性耦合及顺序依赖。

例如:在检查用户有效性的函数中存在清空session函数的调用。当某个误信函数名称的调用者调用该函数就有清空session的风险。这就造成了耦合性,也就是说次函数只有在特定的情况下才能调用。

   如果非要存在这种情况就要在函数名中描述出来,避免时序性错误。

 

不写重复代码

有个算法出现4次重复,这4次重复与其他代码混淆在一起,而且完全不一样。这样的重复会导致问题,造成代码的臃肿,而且算法改变需要修改4处代码。

 

常量vs枚举

尽量用枚举,因为它们隶属于有名称的枚举。

 

以上是关于代码整洁的主要内容,如果未能解决你的问题,请参考以下文章

《代码整洁之道》

整洁之道如何写出更整洁的代码(上)

代码整洁 vs 代码肮脏

React 整洁代码最佳实践

代码整洁之道读书笔记

代码整洁