代码整理的关键逻辑和最佳案例
文章目录
06 | 代码整理的关键逻辑和最佳案例
写一篇文章,要层次清楚、段落分明,写代码也是这样。杂志排版,要布局合理,阅读舒适,代码的编排也要这样。
可是很多人想的是,代码能工作就行,不用讲究格式;时间紧,哪有时间整理代码。
可事实上,干净整洁的代码带给我们的,远远不止格式上的赏心悦目,它更可以减少错误,提高我们的编程速度与效率。因为代码的层次结构、格式部署,是我们对自己思维的整理,也是我们思考逻辑的展现。
很多人不愿意整理代码,觉得这项工作很麻烦。其实代码的整理并不复杂,也不需要什么高深的技巧。有效地使用空行、空格和缩进,简单的分割与对齐,就可以使得代码的视觉效果甚至质量发生巨大的变化,理顺编码的思路,提高编码的效率。这是一个付出少、收获大,值得养成的好习惯。
给代码分块
其实整理代码,就是给代码分块。我们的大脑接收信息是按照分块的模式进行的。一块就是一个可识别的信息,它被安放到短期记忆的“插槽”里。信息块的实际信息量是可变的,但是越简单、越具体的信息块越容易被记住和理解。
一份好的报纸或者杂志,文章本身往往很简短,或者被分割为简短的块。使用小段落、子标题,大量留白,版面切割,尽一切可能分解文章、版面,让眼睛舒适,让大脑有时间停留下来接受每个信息快。
一个代码文件,可以看做是一个杂志版面。在这个版面里,我们要把代码整理成清晰的模块,这样每一小块在视觉上和逻辑上都是可以区分的,可以帮助我们阅读和记忆,减轻眼睛和大脑的疲劳。
比较下面的两种形式的语句。这两种形式,在实际逻辑上是完全相同的。但是,第二个语句使用了更细化的块,这样视觉形式和逻辑形式都是清晰直观的。
|
|
if ((firstName != null) && (lastName != null))
|
|
package coding;
public class CodingFormat { public static void main(String[] args) { System.out.println( “German say hello with " + Greeting.GERMAN.getGreeting()); }
private static enum Greeting { ENGLISH (“English”, “Hello”), SPANISH (“Spanish”, “Hola”), GERMAN (“German”, “Hallo”), MANDARIN (“Mandarin”, “Ni Hao”);
private final String language; private final String greeting;
private Greeting(String language, String greeting) { this.language = language; this.greeting = greeting; }
private String getGreeting() { return greeting; }
private String getLanguage() { return language; } } }
|
|
package coding;
public class CodingFormat { public static void main(String[] args) { System.out.println( “German say hello with " + Greeting.GERMAN.getGreeting()); }
private static enum Greeting { ENGLISH (“English”, “Hello”), SPANISH (“Spanish”, “Hola”), GERMAN (“German”, “Hallo”), MANDARIN (“Mandarin”, “Ni Hao”);
private final String language; private final String greeting;
private Greeting(String language, String greeting) { this.language = language; this.greeting = greeting; }
private String getGreeting() { return greeting; }
private String getLanguage() { return language; } } }
|
|
package coding;
public class CodingFormat { public static void main(String[] args) { System.out.println( “German say hello with " + Greeting.GERMAN.getGreeting()); }
private static enum Greeting { ENGLISH (“English”, “Hello”), SPANISH (“Spanish”, “Hola”), GERMAN (“German”, “Hallo”), MANDARIN (“Mandarin”, “Ni Hao”);
private final String language; private final String greeting;
private Greeting(String language, String greeting) { this.language = language; this.greeting = greeting; }
private String getGreeting() { return greeting; }
private String getLanguage() { return language; } } }
|
|
String firstName, lastName;
|
|
firstName != null
(firstName != null) && (lastName != null)
|
|
if (variable != null) variable.doSomething();
|
|
if (variable != null) { variable.doSomething(); }
|
|
String variable = anObject.getSomething(longExpressionOne, longExpressionTwo, longExpressionThree);
|
|
String varibale = longStringOne + longStringTwo + longStringThree;
|
|
anObject.methodOne(parameterForMethodOne, anObject.methodTwo(parameterForMethodTwo));
/ conventional indentation int runningMiles = runningSpeedOne * runningTimeOne + runningSpeedTwo * runningTimeTwo;
// confusing indentation int runningMiles = runningSpeedOne * runningTimeOne + runningSpeedTwo * runningTimeTwo;
|
|
anObject.methodOne(parameterOne, parameterTwo, parameterTwo);
|
|
anObject.methodOne(parameterForMethodOne, anObject.methodTwo(parameterOneForMethodTwo, parameterTwoForMethodTwo, parameterThreeForMethodTwo));
// bad indentation if ((conditionOne && conditionTwo) || (conditionThree && conditionFour)) { doSomething(); }
// a better indentation, using 8 spaces for the indentation if ((conditionOne && conditionTwo) || (conditionThree && conditionFour)) { doSomething(); }
|
|
import java.util.HashMap; import java.util.Map;
class Solution { /** * Given an array of integers, return indices of the two numbers * such that they add up to a specific target. */ public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException(“No two sum solution”); } }
|
|
文章作者 anonymous
上次更新 2024-06-02