引言:为什么整洁代码不是奢侈品,而是必需品
\n每位Java开发者都遇到过这样的情况:打开一个旧项目,花上几个小时去理解自己几个月前写的东西。更不用说别人的代码了。脏代码会拖慢开发速度,增加bug数量,并打击团队士气。Robert Martin的《Clean Code》一书已成为程序员的圣经,但其原则往往过于抽象。在本文中,我们将通过实际示例,解析Java中Clean Code的关键概念,这些概念今天就可以应用。
\n整洁代码不是关于完美的语法或追逐潮流。它关乎对同事的尊重,对未来的自己负责,最终也是对业务负责。可读的代码更容易维护、测试和重构。让我们看看如何将Java代码从“能运行”转变为“整洁”。
\n\n1. 有意义的命名:用领域语言说话
\n规则:名称应回答“为什么?”、“是什么?”、“怎么做?”
\n糟糕的命名是整洁代码的头号敌人。像int a、String d或List<Integer> list1这样的变量不传达任何信息。好的名称应揭示程序员的意图。
// 糟糕\nint d; // 已过天数\nList<Integer> lst;\n\n// 良好\nint daysSinceCreation;\nList<Integer> customerIds;\n\n避免误导性信息
\n如果变量不是List,而是Set或Map,就不要使用accountList。不要缩写显而易见的内容:用userName而不是usrNm。
类名和方法名
\n- \n
- 类名:名词(
Customer、OrderProcessor)。 \n - 方法名:动词(
calculateTotal()、saveToDatabase())。 \n - 布尔变量:谓词(
isActive、hasPermission)。 \n
// 糟糕\npublic class Data {\n public void proc() { ... }\n}\n\n// 良好\npublic class InvoiceCalculator {\n public BigDecimal calculateTotalAmount() { ... }\n}\n\n2. 函数:短小、原子化且无副作用
\n第一原则:函数应该只做一件事
\nJava中理想的函数是4-20行。如果一个函数做了不止一件事,就需要拆分。经典标志:如果你能从函数中提取出另一个有意义的函数,那就去做。
\n\n// 糟糕:函数做了三件事\npublic void processOrder(Order order) {\n if (order == null) throw new IllegalArgumentException();\n // 1. 验证\n if (order.getItems().isEmpty()) {\n logger.warn("空订单");\n return;\n }\n // 2. 计算总价\n BigDecimal total = BigDecimal.ZERO;\n for (Item item : order.getItems()) {\n total = total.add(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())));\n }\n // 3. 发送邮件\n emailService.sendConfirmation(order.getCustomerEmail(), total);\n}\n\n// 良好:每个函数只做一件事\npublic void processOrder(Order order) {\n validateOrder(order);\n BigDecimal total = calculateTotal(order);\n sendConfirmationEmail(order, total);\n}\n\nprivate void validateOrder(Order order) {\n if (order == null || order.getItems().isEmpty()) {\n throw new IllegalArgumentException("无效订单");\n }\n}\n\nprivate BigDecimal calculateTotal(Order order) {\n return order.getItems().stream()\n .map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())))\n .reduce(BigDecimal.ZERO, BigDecimal::add);\n}\n\n童子军规则:让营地比你发现时更干净
\n每次编辑文件时,都要改进它:重命名糟糕的变量,拆分冗长的函数。这可以防止代码熵增。
\n\n<