代码整理的关键逻辑和最佳案例(排版中)

`写一篇文章,要层次清楚,段落分明,写代码也是这样。杂志排版,布局合理,阅读舒服,代码的编排也很重要`

代码整洁的优点

代码的整理并不复杂,也不需要什么高深的技巧。有效的使用代码,空格和缩进,简单的分割与对齐,就可以使得代码的视觉效果甚至质量发生巨大的变化,

理顺编码的思路,提高编码的效率。这是一个付出少,收获大,值得养成的好习惯。

解决方案:给代码分块

reason:

我们的大脑接收信息是按照分块的模式进行的。一块是一个可识别的信息,它被安放到短期的记忆的"插槽"里。

信息块的实际信息量是可变的,但是越简单,越具体的信息块越容易被记住和理解。

一个代码文件,可以看做是一个杂志版面,在这个版面里,我们要把代码整理成清晰的模块,这样的每一块在视觉上和逻辑上都是可以区分的,

可以帮助我们阅读和记忆,减轻眼睛和大脑的疲劳。

`优化一:`

例子1:下面的两种形式的语句。这两种形式,在实际逻辑上是完全相同的。但是,第二个语句使用了

更细化的块,这样视觉形式和逻辑形式都是清晰直观的。

1.

if(firstName !=null && lastName != null)

2.

if((firstName!=null)&&(lastName != null));

如果一段代码放眼望去都是大块大块的,那对于一个初学者来说,阅读和理解就非常困难。

他需要将复杂的表达式再次分解,分解到可以单独理解的变量和运算符,再重新组合。

**_注意三点:_**

1.保持代码块的单一性,一个代码块只能有一个目标。

代码块内的所有的内容都是为了一个目标服务的,不能把无关的内容放在同一个代码块里。同一个代码块里的

语句相互联系比与相邻代码块里的语句更为紧密。

2.注意代码块的完整性

代码块就是一个完整的信息块。一个代码块要表达一个相对完整的意思,不能一个意思没说完就分块了。

3,代码块数量要适当

一个基础的代码块最好不要超过25行,否则就会有增加阅读的理解的困难。

**使用空白空间**

  为什么呢?

靠近的代码会形成一个视觉块,并且具有隐含的关联。分开的代码,意味着上下代码的关联没有那么紧密。这种视觉

效果会给我们暗示,代码直接的关系越紧密。

因此,空白区域,不仅仅可以用来分割代码,还展示了代码之间的关系。

**一行一个行为**

每一行代码仅仅表示一个行为。这样的每一行代码才是常规的大小的,可以识别的基础信息块。

下面这行代码包含了两个行为,一个是判断行为,一个是执行行为。两个行为放在一行,这样的代码不仅看起来有些乱,

我们的大脑处理起来有些萌。

`if (variable != null) variable.doSomething();`

如果分割开这两个行为,信息块的区隔会更明显,代码会更清晰。

if (variable != null) {

variable.doSomething();

}

一般一个完整的表达式可以看做是一个完整的独立行为。

**基本的换行原则**

代码分块的基本思想,同样使用与换行。基本的换行需要考略一下三点。

1。每行代码字符数的限制。

2。如果一行不足以容纳一个表达式,就需要换行;

3。一般的换行原则包括一下5点

1.在逗号后换行

String variable = anObject.getSomething(longExpressionOne,

longExpressionTwo, longExpressionThree);

2。在操作符前换行

String varibale = longStringOne + longStringTwo

+ longStringThree;

3。高级别的换行优先

anObject.methodOne(parameterForMethodOne,

anObject.methodTwo(parameterForMethodTwo));

/ conventional indentation

int runningMiles = runningSpeedOne * runningTimeOne

+ runningSpeedTwo * runningTimeTwo;

// confusing indentation

int runningMiles = runningSpeedOne

* runningTimeOne + runningSpeedTwo

* runningTimeTwo;

4。新的换行与上一行同级别表达式的开头对齐

anObject.methodOne(parameterOne,

parameterTwo,

parameterTwo);

5。如果上述规则导致代码混乱或者代码太靠右,使用8个空格作为锁进

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 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");

  }

}

你可能感兴趣的:(代码整理的关键逻辑和最佳案例(排版中))