zoukankan      html  css  js  c++  java
  • 代码整洁

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

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

    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枚举

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

  • 相关阅读:
    AngularJs $location 和 $window
    AngularJS——自定义服务详解(factory、service、provider)
    angularAMD+requireJs
    angular ui-router时要使用html5Mode=true
    CSS3的calc()使用
    React Ajax this.IsMounted() is not a function
    css有用的代码片段
    8908
    454
    234
  • 原文地址:https://www.cnblogs.com/gxz-sw/p/6646769.html
Copyright © 2011-2022 走看看