代码整洁之道总结

一、名副其实的命名(如果名称需要注释来补充,那就不是名副其实的命名)
    例: 
        int d;// 消逝的时间,以日计

    参考:   
        int elapsedTimeInDays;

二、简洁明了的方法
    例: 
        public List<int[]> getThem() {
            List<int[]> list1 = new ArrayList<int[]>();
            for (int[] x : theList) 
                if (x[0] == 4) 
                    list1.add(x);
                return list1;
        }
            
    参考:   
        public List<Cell> getFlaggedCells(){
            List<Cell> flaggedCells = new ArrayList<Cell>();
            for (Cell cell : gameBoard) 
                if (cell.isFlagged()) 
                    flaggedCells.add(cell);
                 return flaggedCells;
        }    

三、命名避免误导
    如:hp、aix、sco都不该用来做变量名,因为它们都是UNIX或类似平台的专有名称。
        别用xxList来命名一堆数据除非真的是List类型 可以考虑xxGroup或者xxs
        别用容易引起误导的字母 如字母O、I 和数字0、1
            

四、使用可搜索的名称
    MAX_CLASSES_PER_STUDENT很容易搜索 但是常量就很难搜索的到 字母e也很难搜索到
             

五、扔掉前缀吧 这些是旧时代的产物
    例:
    
        public class Part {
            private String m_dsc; // The textual description
            void setName(String name) {m_dsc = name;}
        }
            
    参考: 
        public class Part { 
            String description;
            void setDescription(String description) {
                this.description = description;
            }
        }

六、别扮可爱
    如果名称太耍宝,那就只有同作者一般有幽默感的人才能记得住,int Ծ‸Ծ = 0?
    宁可明确,毋为好玩。

七、每个概念对应一个词
    在同一堆代码中有controller,又有manager,还有driver,就会令人困惑。为什么不全用controllers或managers?

八、别用双关方法
    如一个add方法 通过增加或者连接获取新值,现在一个新类一个方法是讲参数放在容器里,也取名add方法,看似和其他        add方法名字一致,但是语意并不相同,应该用insert或者append之类的命名。

九、添加有意义的语境
    
    例:
        private void printGuessStatistics(char candidate, int count) { 
            String number;
            String verb;
            String pluralModifier; 
            if (count == 0) { 
                number = "no";
                verb ="are";
                pluralModifier = "s";
            } 
            else if (count == 1) {
                number = "1";
                verb = "is";
                pluralModifier = "";
            } 
            else {
                number = Integer.toString(count);
                verb = "are";
                pluralModifier = "s";
            }
            String guessMessage = String.format("There %s %s %s%s", verb, number,candidate,pluralModifier);
            print(guessMessage);
        }
        
        上列函数有点儿过长,变量的使用贯穿始终。要分解这个函数,需要创建一个名为GuessStatisticsMessage的类,把三个变量做                成该类的成员字段。这样它们就在定义上变作了GuessStatisticsMessage的一部分。语境的增强也让算法能够通过分解为更小的
        函数而变得更为干净利落。
    
    参考:
        public class GuessStatisticsMessage {
            private String number;
            private String verb;
            private String pluralModifier;
            public String make(char candidate, int count) { 
                createPluralDependentMessageParts(count); 
                return String.format("There %s %s %s%s",verb, number, candidate, pluralModifier );
            }
            private void createPluralDependentMessageParts(int count) {
                if (count == 0) {
                    thereAreNoLetters();
                } 
                else if (count == 1) {
                    thereIsOneLetter();
                } 
                else {
                    thereAreManyLetters(count);
                }
            }
            private void thereAreManyLetters(int count) {
                number = Integer.toString(count);
                verb = "are";
                pluralModifier = "s";
            }
            private void thereIsOneLetter() {
                number = "1";
                verb = "is";
                pluralModifier = "";
            }
            private void thereAreNoLetters() {
                number = "no";
                verb = "are";
                pluralModifier = "s";
            }
        }

十、函数要短小
    函数的第一规则是要短小。第二条规则是还要更短小


十一、函数只做一件事
    函数应该做一件事。做好这件事。只做这一件事。

十二、使用描述性的名称(不要害怕使用长名称)
    别害怕长名称。长而具有描述性的名称,要比短而令人费解的名称好。

十三、函数参数
    最理想的参数数量是零(零参数函数),其次是一(单参数函数),再次是二(双参数函数),应尽量避免三(三参数函数)。有        足够特殊的理由才能用三个以上参数(多参数函数)—所以无论如何也不要这么做。
    
十四、标识参数
    方法调用render(true)对于可怜的读者来说仍然摸不着头脑。看到render(Boolean isSuite),稍许有点帮助,不过仍然不够。应        该把该函数一分为二:reanderForSuite()和renderForSingleTest()。

十五、参数对象
    如果函数看来需要两个、三个或三个以上参数,就说明其中一些参数应该封装为类了。例如,下面两个声明的差别:
    Circle     makeCircle(double x, double y, double radius);
    Circle makeCircle(Point center, double radius);    

十六、动词与关键字
    例:
        write(name) 
    参考:
        writeField(name)   它告诉我们,“name”是一个“field”。
    
十七、输出参数
    例:
        appendFooter(s);  s是什么让人疑惑 s是输出还好是输入也让人费解 看看原函数 
        public void appendFooter(StringBuffer report)    被迫检查函数 会中断思路
    参考:
        report.appendFooter();

    


十八、注释一般都是修饰糟糕的代码 尽量可以不添加注释读懂代码 
    例:
        //check args is eligible for full benefits
        if((xx.flags&yy)&&(yy>65))
    参考:
        if(xx.isEligibleForFullBenefits)    
    
    
十九、如果一定要添加注释 简洁明了 不要废话连篇

二十、不要滥用位置标记
    比如//action//    --------------------anything----------------------

        
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值