0%

短小

  • 函数的第一规则是要短小,每个函数依序把你带到下一个函数
  • 函数的缩进层不该多于一层或两层
Read more »

概念

  • 策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改,属于行为型模式
  • 在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换
  • 通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码
Read more »

下文来自 On Java 8 - Chapter 9

前言

  • 多态,也称为动态绑定、后期绑定、运行时绑定
  • Java 中除了staticfinal方法(private方法也是隐式的final)外,其他所有方法都是后期绑定
    • 指明final可以防止方法被重写,有效地”关闭了“动态绑定
    • 然而,大部分情况下这样做不会对程序的整体性能带来什么改变,因此最好是为了设计使用final,而不是为了提升性能而使用
Read more »

代码美学:为何要成为“不嵌套主义者”

https://youtu.be/CFRhGnuXG-4

消除嵌套的方法

条件反转

  • guard语句
  • 验证守护 validation gatekeeping
  • error first 风格
  • return early 尽早返回

提炼子函数

评论区:

0、如何硬着头皮开始?首先要有信念。
众所周知,代码在编译时会首先得到AST,这意味着任何复杂函数都可以抽象成最简单的两两关系——我们不会做得这么绝,但是务必要有这样的信心。

1、如何判断一个函数是否需要抽象?可以把“50行”当作一个指标。
20年前一些老派的公司做CodeReview时,会把代码打印到纸上。如果哪个函数长到需要翻页才能看全,Reviewer就会摆出嫌弃的表情,然后把你挂掉。

2、如何判断提炼的子函数的好坏?有两个硬指标:
一是子函数依赖的参数个数,二是子函数的复用次数。
子函数复用越多,参数越少,就说明拆解越是有效。

3、当你提炼出多个子函数,而它们之间使用到的参数有相似之处时,可以将它们进一步抽象成类。
类就是绑定在数据上的函数。

4、可以用Map、Reduce、Filter这些高阶函数配合Lambda表达式来代替简单循环,在处理缺乏抽象的数据结构时有奇效。如果你的语言是C#,请务必尽可能大胆地使用LInQ;Python可以适当运用列表推导式,但要顾及同事的感受。