clean code

 

        这一章主要将的是命名。Bob大叔确实不是一般人,讲的头头是道,并且讲得很细致。虽然他和Steve McConnell两位都对命名做过自己的阐述,但是Bob大叔所讲的绝不是Steve McConnell大叔的翻版,而是有自己独到的特色。看来同为老程序员,大家的感受既有相似的地方,也有不同之处。下面来看看文章中的一些摘要。

        1.Use Intention-Revealing Names(命名要表明用途)

        命名可能需要花费一些时间,但由此带来的便利可以为你节省更多的时间;如果要给名字添加注释来表明其用途,那么这样的命名就没有表明它的用途。

        2.Avoid Disinformation(避免不含信息的命名,如d)

        名字要能体现出代码的意义。不要用小写的L和大写的O来做变量名,因为很容易被看成数字1和0。

        3.Make Meaningful Distinctions(命名要区别明显)

        数字序列命名(如A1,A2)不会带来任何有用的信息,也无法体现出作者的意图。

        4.Use Pronounceable Names(使用可正常发音的命名,这一点很重要,要不然的话程序员之间讨论问题的时候就很悲催了)

        5.Use Searchable Names(使用便于查找的命名,如果给一个变量命名为e,那么用查找工具查找变量名的时候就会很杯具,~~~~(>_<)~~~~ )

        6.不要使用成员变量前缀(如m_等),应该使用一些能够高亮成员变量的工具,并且类和方法不要写得太长。

        7.Avoid Mental Mapping(不要让别人看到你的命名要想半天将你的变量名与他们已经知道的概念联系起来。如不要使用d这样的简短命名,也不要使用意思不明确的词让你想很久,命名的原则是“清晰为王”)。

        8.类名最好使用名词,方法名最好使用动词。

        9.Pick One Word per Concept(对于同一个概念只用一个相同的单词来表达,避免一个概念用多个不同的单词来表达,这样容易把人混淆)

        10.Don’t Pun(不要用一个单词来表示多种不同的概念,这样也容易把人搞混淆)

        11.Add Meaningful Context(为命名添加有意义的上下文背景,如加前缀等)。

        12.Don’t Add Gratuitous Context(不要为命名添加无关的背景)。

在 Java 中,`Clean Code` 是一种编写代码的最佳实践方式,它强调代码的可读性、可维护性和简洁性。下面我将回答如何在 Java 中实现 `Clean Code` 的一些原则,并通过一个示例展示如何编写干净的代码。 ### 回答问题 `Clean Code` 是指编写易于理解、维护和扩展的代码。以下是一些实现 `Clean Code` 的关键原则: 1. **有意义的命名**:变量、方法和类的名称应该清晰地表达其用途。 2. **函数要小**:每个函数只做一件事,并且尽量保持简短。 3. **避免重复代码**:遵循 DRY(Don't Repeat Yourself)原则。 4. **减少复杂性**:使用简单的设计模式和算法来解决问题。 5. **注释要少但精**:代码本身应该是自解释的,只有在必要时才添加注释。 ### 给出解释 #### 1. **有意义的命名** - 使用描述性的名称,让代码更易读。 - 避免使用单字母变量名(除非是循环计数器等特殊情况)。 #### 2. **函数要小** - 每个函数应该只负责完成一个任务。 - 如果一个函数变得太长或太复杂,考虑将其拆分为多个小函数。 #### 3. **避免重复代码** - 将重复的逻辑提取到单独的方法或类中。 - 使用设计模式(如工厂模式、单例模式等)来减少冗余。 #### 4. **减少复杂性** - 使用简单的控制结构和算法。 - 避免过多的嵌套和复杂的条件语句。 #### 5. **注释要少但精** - 代码本身应该是自解释的。 - 只在必要时添加注释,例如解释复杂的逻辑或算法。 ### 示例代码 以下是一个不干净的代码示例以及如何改进它的方法: #### 不干净的代码 ```java public class Calculator { public int calculate(int a, int b, String operation) { if ("add".equals(operation)) { return a + b; } else if ("subtract".equals(operation)) { return a - b; } else if ("multiply".equals(operation)) { return a * b; } else if ("divide".equals(operation)) { if (b != 0) { return a / b; } else { System.out.println("Cannot divide by zero"); return 0; } } else { System.out.println("Invalid operation"); return 0; } } } ``` #### 改进后的干净代码 ```java public class Calculator { // 定义支持的操作 private enum Operation { ADD, SUBTRACT, MULTIPLY, DIVIDE } // 主计算方法 public int calculate(int a, int b, String operationName) { try { Operation operation = Operation.valueOf(operationName.toUpperCase()); return performOperation(a, b, operation); } catch (IllegalArgumentException e) { System.out.println("Invalid operation: " + operationName); return 0; } } // 执行具体操作 private int performOperation(int a, int b, Operation operation) { switch (operation) { case ADD: return add(a, b); case SUBTRACT: return subtract(a, b); case MULTIPLY: return multiply(a, b); case DIVIDE: return divide(a, b); default: throw new IllegalArgumentException("Unsupported operation: " + operation); } } // 加法 private int add(int a, int b) { return a + b; } // 减法 private int subtract(int a, int b) { return a - b; } // 乘法 private int multiply(int a, int b) { return a * b; } // 除法 private int divide(int a, int b) { if (b == 0) { System.out.println("Cannot divide by zero"); return 0; } return a / b; } } ``` ### 输出结果 对于不干净的代码: ``` Invalid operation ``` 对于干净的代码: ``` Invalid operation: invalidOp ``` ### 总结 - 清晰的命名和分离的职责使代码更易于理解和维护。 - 使用枚举和异常处理可以提高代码的健壮性和可读性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值