`
kim_miao
  • 浏览: 190681 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

编写可读代码的艺术-从命名和注释开始

 
阅读更多

什么样的代码才是真正好的、整洁的代码?iteye.com上的文章很多:
Grady Booch,《面向对象分析与设计》作者:
引用
    • 整洁的代码是简单、直接的;
    • 整洁的代码,读起来像是一篇写得很好的散文;
    • 整洁的代码永远不会掩盖设计者的意图,而是具有少量的抽象和清晰的控制行。
Dave Thomas,OTI公司创始人,Eclipse战略教父:
引用
    • 整洁的代码可以被除了原作者之外的其他开发者阅读和改善;
    • 具备单元测试和验收测试;
    • 有一个有意义的名字;
    • 使用一种方式来做一件事情;
    • 最少的依赖,并明确定义;
    • 提供了一个清晰的、最小的API;
    • 应该根据语言特性,在代码中单独显示必要的信息,而不是所有的信息。
     
从他们的归纳中,可以看出真正好的代码都有一个共性,可读性。在《编写可读代码的艺术》这本书中,作者是这样定义可读性的:“代码的写法应当使用别人理解所需的时间最小化”。在这本书的指导下,从命名和注释开始在自己这几年写的代码中找出一些例子。希望自己以后在这些细节上引以为戒。
一.把信息封装到名字中,无论是类,方法或变量的命名

    1.选择专业的词,尽量避免模糊或意义太广

 public List<UserIp> select(String userId){
 }

      如果改成这样是不是更明确:

 public List<UserIp> queryUserIps(String userId){
  }
 


    2.避免泛泛的名字
        避免像tmp,i,j ,k这样泛泛的名字,比较常见循环中的 i,j,k.

        for (int j = 0; j < actionLogs.size(); j++) {
           ActionLog actionLog = actionLogs.get(j);
         }

 
    如果改成这样:

        for (int index = 0; index < actionLogs.size(); j++) {
           ActionLog actionLog = actionLogs.get(index);
         }

 

    3.用具体的名字代替抽象的名字
    在给变量,函数或者其它元素命名时,要把它描述的更具体而不是更抽象。

        /**
         * 刷新IP库
         */
        public void refreshData() ;

    如果改成这样:

      /**
         * 刷新IP库
         */
        public void refreshIpData() ;
 

   4.使用前缀或后缀来给名字附带更多信息
        对于像带单位的值均可以用后缀来附加更多信息
        常见的打印日志的代码:

         long startTime = System.currentTimeMillis();  
         if (logger.isInfoEnabled()) {
                        logger.info((System.currentTimeMillis() - startTime) + "ms,success!");
         }

 

     如果改成这样:

 long startMs = System.currentTimeMillis();  
         if (logger.isInfoEnabled()) {
                        logger.info((System.currentTimeMillis() -  startMs ) + "ms,success!");
         }
    

 

    5.决定名字的长度
    (1)在小的作用域里可以使用短的名字,丢掉没用的词。

   public static StrategyType convertToStrategyType(StrategyTypeDO strategyTypeDO) {
         }

 

       如果改成这样:

      public static StrategyType toStrategyType(StrategyTypeDO strategyTypeDO) {
         }

 
    6.给boolean命名
        通常来讲,加上is,has,can 或should这样的词,可以把布尔值变得更明确。
        如代码:

        boolean first = true;
                if(subConditions!=null&&subConditions.size()>0){
                    for (FactorCondition condition : subConditions) {
                        String template = generateCode(condition);
                        sbf.append((first ? "" : " || ") + "( " + template + " )");
       
                        if (first) {
                            first = false;
                        }
                    }
                }
 

    若改为:

           boolean isFirst = true;
            if(subConditions!=null&&subConditions.size()>0){
                for (FactorCondition condition : subConditions) {
                    String template = generateCode(condition);
                    sbf.append((isFirst ? "" : " || ") + "( " + template + " )");
   
                    if (isFirst) {
                        isFirst = false;
                    }
                }
            }

 

    7.与使用者的期望相匹配
        方法的名称要符合用户的期望,我们通常期望get()方法是轻量的方法。

public double getFPSecurityModelScore(Event event) {
            //这里省略
           }
 

        若改为:

 public double computeFPSecurityModelScore(Event event) {
            //这里省略
           }

 

二.代码风格与注释

      一致的风格要比“正确”的风格更重要,对于一个团队乃至一个公司,要采用一致的格式化模板。对于注释,一定不要为注释而注释,许多时候好代码>坏代码+注释,当你觉得要写很多注释时,也从侧面反映出你的代码或设计不太美妙。注释的目的就是尽量帮助读者了解和作者一样多。
   
       1.不要为了注释而注释

  /**
         * Getter method for property <tt>groupName</tt>.
         *
         * @return property value of groupName
         */
        public String getGroupName() {
            return groupName;
        }
   
        /**
         * Setter method for property <tt>groupName</tt>.
         *
         * @param groupName value to be assigned to property groupName
         */
        public void setGroupName(String groupName) {
            this.groupName = groupName;
        }

 

    当然,上面的的注释是由模板生成的,确有为了注释而注释之嫌。
   
    2.注释要记录你的思想.

      包括为什么代码写成这样而不哪样的内在理由。对于代码的缺陷或需要优化的地方可给予注释,对于常量,可记录常量背后的故事,为什么是这个值,如:

        /**
         * The load factor used when none specified in constructor.
         */
        static final float DEFAULT_LOAD_FACTOR = 0.75f;
 


   
    3.站在读者的立场上思考。

     为普通读者意料之外的行为加上注释,用注释来总结代码块或精确地描述函数的行为,使读者不致迷失在细节中。

三.细节决定成败,表面并非肤浅
    对于上面的每一个细节如果都能做的很好,这就为写好代码,写好可读代码,写好整洁代码迈出了第一步。

参考资料:《编写可读代码的艺术》

分享到:
评论

相关推荐

    编写可读代码的艺术-完整版(带书签)_可读代码_

    《编写可读代码的艺术》是一本专注于提升代码可读性的著作,它强调了代码的可读性对于软件开发的重要性。可读代码不仅有助于团队协作,还能降低维护成本,提高软件质量。以下是书中涵盖的一些关键知识点: 1. **...

    如何让代码更可读-读《编写可读代码的艺术》读书笔记.pdf

    《编写可读代码的艺术》是一本致力于提升代码可读性的书籍,强调了代码可读性在软件工程中的重要性。代码可读性不仅关乎程序员之间的沟通效率,还直接影响到软件的维护成本。以下是对书中一些核心观点的提炼: 1. *...

    编写可读代码的艺术-完整版.rar

    《编写可读代码的艺术》是一本专注于提升代码可读性的著作。在软件开发领域,代码的可读性是至关重要的,因为代码不仅是机器执行的指令,更是开发者之间沟通的工具。良好的代码可读性能够提高团队协作效率,降低维护...

    编写可读代码的艺术(The Art of Readable Code)

    《编写可读代码的艺术》是一本由Dustin Boswell和Trevor Foucher共同撰写的书籍,它旨在教授程序员如何编写出易于理解的代码。该书的核心理念强调代码不仅应该能够运行,更重要的是能够让其他人在最短的时间内理解其...

    编写可读代码的艺术

    《O’Reilly精品图书系列:编写可读代码的艺术》关注编码的细节,总结了很多提高代码可读性的小技巧,看似都微不足道,但是对于整个软件系统的开发而言,它们与宏观的架构决策、设计思想、指导原则同样重要。...

    编写可读代码的艺术.rar

    书中的内容涵盖了编程语言的进阶技巧、代码重构方法以及提升代码艺术性的诸多方面。以下是该书涉及的一些关键知识点: 1. **代码可读性的重要性**:良好的代码可读性能够帮助开发者更快地理解代码逻辑,提高代码...

    编写可读性代码的艺术.docx

    《编写可读性代码的艺术》是一本专注于提升代码质量,特别是强调代码可读性的书籍。在IT行业中,尤其是在软件开发领域,代码的可读性至关重要,因为它直接影响到代码的维护和扩展。良好的代码可读性不仅是对其他...

    编写可读性代码的艺术.pdf

    《编写可读性代码的艺术》这本书聚焦于如何提高代码的可读性,强调代码不仅应该能够被计算机正确执行,更重要的是能够让其他开发者快速理解其功能和逻辑。本书通过一系列实用的指导原则和最佳实践,帮助读者掌握编写...

    编写可读代码的艺术.[美]Dustin Boswell,Trevor Foucher(带详细书签)

    本书分成四部分:表面层次上的改进命名、注释以及审美——可以用于代码库每一行的小提示。简化循环和逻辑在程序中定义循环、逻辑和变量,从而使得代码更容易理解。重新组织你的代码在更高层次上组织大的代码块以及在...

    代码大全--代码之美

    1. **代码规范**:书中强调了遵循统一的编码风格和命名约定的重要性,这不仅有助于团队协作,还能使代码更易于理解和调试。例如,使用有意义的变量名,遵循缩进规则,以及避免过长的函数和过深的嵌套。 2. **注释与...

    如何写好代码-注释.pptx

    ### 如何写好代码——注释 #### 一、好代码的标准 优秀的代码不仅能够实现功能需求,还应该具备良好的可读性、可维护性和扩展性。...记住,编写高质量的代码不仅仅是实现功能那么简单,更是一种艺术和责任。

    提升代码质量:编写可读性强的代码的艺术

    本文将探讨如何编写可读性强的代码,包括代码风格、命名约定、代码结构、注释和文档等方面。 代码是程序员与程序员沟通的桥梁。良好的代码可读性能够使其他开发者更快地理解代码的意图和逻辑,从而提高团队协作的...

    代码的艺术

    他的职业生涯和贡献说明了软件工程师的价值不仅仅在于写代码,更在于将个人的热情、专业知识和对代码艺术的追求结合在一起。 总而言之,《代码的艺术》不仅是一篇技术文章,更是对软件工程师职业生活的深刻反思和...

    代码的艺术(百度BFE团队_章淼)

    接着,章淼阐释了艺术的本质,艺术家的思考方式,以及编写代码的过程,从无序到有序,将现实世界问题转化为数字模型。 在实践方面,课程详细讨论了好代码的特性,包括高效性、鲁棒性、简洁性、可维护性、可测试性、...

    修改代码的艺术

    《修改代码的艺术》一书深入探讨了在软件开发过程中如何优雅地进行代码修改,以保持代码的可读性、可维护性和性能。这本书的核心理念是,代码修改不仅仅是修复错误,而是一个提升软件质量的重要环节。以下是一些关键...

    修改软件的艺术:构建易维护代码的9条最佳实践

    良好的代码结构和命名应自解释,注释只用于补充复杂逻辑或非直观的设计。 5. 遵循编程规范和风格指南:统一的代码风格能提高团队协作效率,减少审阅代码时的困惑。例如,遵循PEP8(Python)或Google Java Style ...

    .net编写的音乐播放器--MusicPlayer

    如果要改进这个项目,首先需要进行代码重构,将功能分解为更小的、可重用的组件,并添加必要的注释。 Bug的存在则意味着程序在某些情况下可能无法正常工作。调试和修复Bug是软件开发中的常规任务,通常需要利用调试...

Global site tag (gtag.js) - Google Analytics