没有合适的资源?快使用搜索试试~ 我知道了~
你所需要知道的代码整洁之道1
需积分: 0 0 下载量 161 浏览量
2022-08-03
21:40:39
上传
评论
收藏 893KB PDF 举报
温馨提示
试读
21页
声明代码的层次意图,明显的细节在注释中使输/输出例进说明代码中的缺陷,使标记标记通常的意义还没处理的事情已知的法运的代码对个问题不得不采的价粗糙的解决案命名关键
资源详情
资源评论
资源推荐
你
所
需
要
知
道
的
代
码
整
洁
之
道
分
享⼈
:
李
忠
键
分
享
时
间
:
2020-01-17
联
系
⽅
式
:
zhongjianlee@outlook.com
程
序
是
写
给
⼈
读
的
,
只
是
偶
尔
让计
算
机
执
⾏
⼀下
。
—— Donald Ervin Knuth
(
⾼
德
纳
)
序
每次
review
过
往
写
的
代
码
,
总
有
⼀
种
不
忍
直
视
的
感
觉
。
想
提
⾼
编
码
能
⼒
,
故
阅
读
了
⼀
些
相
关
书
籍
及博
⽂
,
并
有
所感悟
,
今
将
⼀
些
读
书
笔
记
及
个
⼈
⼼得
感悟
梳
理
出
来
。
抛
转
引
⽟
,
希
望
这
砖
能
抛
得
起
来
。
⼤
纲
坏
味
道
的
代
码
圈
复
杂
度
重
构
代
码
整
洁
之
道
编
码
原
则
&
设计
模
式
总
结
参
考
坏
味
道
的
代
码
开
始
阅
读
之
前
,
⼤
家
可
以
快
速
思
考
⼀下,
⼤
家
脑
海
⾥
的
好
代
码
和
坏
代
码
都
是
怎
么
样
的
“
形
象
”
呢
?
如
果
看
到
这
⼀
段
代
码
,
如
何
评
价
呢
?
if (a && d || b && c && !d || (!a || !b) && c) {
// ...
} else {
// ...
}
上
⾯
这
段
代
码
,
尽
管
是
特
意
为举例
⽽
写
的
,
要
是
真
实
遇
到
这
种
代
码
,
想
必
⼤
家
都
“
⼀
⾔
难
尽
”
吧
。
⼤
家
多
多
少少
都
有
⼀
些
坏
味
道
的
代
码的
“
印
象
”
,
坏
味
道
的
代
码
总
有
⼀
些
共
性
:
Duplicated Code
(
重
复
代
码
)
Long Method
(
过
⻓
函
数
)
Large Class
(
过
⼤
的
类
)
Long Parameter List
(
过
⻓
参
数
列
)
Temporary Field
(
令⼈
迷
惑
的
暂时
字
段
)
Shotgun Surgery
(
霰
弹式
修
改
):⼀
种
变
化
引
发
多
个
类
相
应
修
改
......
那
坏
味
道
的
代
码
是
怎
样
形
成
的
呢
?
上⼀个
写
这
段
代
码的
程
序
员
经
验
、
⽔
平
不
⾜
,
或
写
代
码
时
不
够
⽤
⼼
;
产
品
经
理
提
出
的
奇
葩
需
求
导
致
写
了
很
多
hack
代
码
;
某
⼀个
模
块
业
务
太复
杂
,
需
求
变
更
的
次
数
太多
,
经
⼿
的
程
序
员
太多
。
......
对
坏
味
道
的
代
码
有
⼀个
⼤
概
的
了
解
后
,
或
许读
者
⼼
中
有
⼀个
疑
问
:
代
码的
好
坏
有
没
有
⼀
些
量
化
的
标
准
去
评
判
呢
?
答
案是
肯
定
的
。
接
下
来
,
通过
了
解
圈
复
杂
度
去
衡
量
我
们
写
的
代
码
。
然
⽽
当
代
码的
坏
味
道
已
经
“
弥
漫
”
到
处
都
是
了
,
这
时
我
们
应
该
了
解
⼀下
重
构
。
代
码
到
了
我
们
⼿
⾥
,不
能
继续
“
发
散
”
坏
味
道
,
这
时
应
该
了
解
如
何
编
写
clean
code
。
此
外
,
我
们
还
应
该
掌握
⼀
些
编
码
原
则
及
设计
模
式
,
这
样
才
能
做到
有
的
放
⽮
。
圈
复
杂
度
圈
复
杂
度
(
Cyclomatic complexity
,
简
写
CC
)
也
称
为
条
件
复
杂
度
,
是
⼀
种
代
码
复
杂
度
的
衡
量
标
准
。
由
托
⻢
斯
·J·
⻨
凯
布
(
Thomas J. McCabe, Sr.
)
于
1976
年
提
出
,
⽤
来
表
示程
序
的
复
杂
度
。
圈
复
杂
度
可
以
⽤
来
衡
量
⼀个
模
块
判
定
结
构
的
复
杂
程
度
,
数
量
上
表
现
为
独
⽴
现
⾏
路
径
条
数
,
也
可
理
解
为
覆
盖
所
有
的
可
能
情
况
最
少
使
⽤
的
测
试
⽤
例
数
。
判
定
⽅
法
圈
复
杂
度
可
以
通过
程
序
控
制
流
图
计
算
,
公
式
为
:
V(G) = e + 2 - n
e :
控
制
流
图
中
边
的
数
量
n :
控
制
流
图
中
节
点
的
数
量
有
⼀个
简
单
的
计
算
⽅
法
:
圈
复
杂
度
实
际
上
就
是
等
于
判
定
节
点
的
数
量
再加
上
1
。
注
:
if else
、
switch case
、
for
循
环
、
三
元
运
算符
、
||
、
&&
等
,
都
属
于
⼀个
判
定
节
点
。
衡
量
标
准
代
码
复
杂
度
低
,
代
码
不⼀
定
好
,
但代
码
复
杂
度
⾼
,
代
码
⼀
定
不
好
。
圈
复
杂
度
代
码
状
况
可
测
性
维
护成
本
1 - 10
清
晰
、
结
构
化
⾼
低
10 - 20
复
杂
中 中
20 - 30
⾮
常
复
杂
低
⾼
>30
不
可
读
不
可
测
⾮
常
⾼
圈
复
杂
度
检
测
⽅
法
ESLint
规
则
ESLint
提
供了
检
测
代
码
圈
复
杂
度
的
rules
。
开
启
rules
中
的
complexity
规
则
,
并
将
圈
复
杂
度
⼤
于
0
的
代
码的
rule severity
设
置
为
warn
或
error
。
rules: {
complexity: [
'warn',
{ max: 0 }
]
}
CLIEngine
借
助
ESLint
的
CLIEngine
,
在
本
地
使
⽤
⾃
定
义
的
ESLint
规
则
扫
描
代
码
,
并
获
取
扫
描
结
果
输
出
。
降
低代
码的
圈
复
杂
度
很
多
情
况
下,
降
低
圈
复
杂
度
就
能
提
⾼
代
码的
可
读
性
了
。
针
对
圈
复
杂
度
,
结
合
例
⼦
给
出
⼀
些
改
善
的
建
议
:
1.
抽
象
配
置
通过
抽
象
配
置
将
复
杂
的
逻辑
判
断
进
⾏
简
化
。
before:
// ...
if (type === '
扫
描
') {
scan(args)
} else if (type === '
删
除
') {
delete(args)
} else if (type === '
设
置
') {
set(args)
} else {
// ...
}
after:
const ACTION_TYPE = {
扫
描
: scan,
删
除
: delete,
设
置
: set
}
ACTION_TYPE[type](args)
2.
提
炼
函
数
将
代
码
中
的
逻辑进
⾏
抽
象
提
炼
成
单
独
的
函
数
,
有
利
于
降
低代
码
复
杂
度
和
降
低
维
护成
本
。
尤
其
是
当
⼀个
函
数
的
代
码
很
⻓
,
读
起
来
很
费
⼒
的
时
候
,
就
应
该
思
考能
否
提
炼
成
多
个
函
数
。
before:
function example(val) {
if (val > MAX_VAL) {
val = MAX_VAL
}
for (let i = 0; i < val; i++) {
doSomething(i)
}
// ...
}
after:
function setMaxVal(val) {
return val > MAX_VAL ? MAX_VAL : val
}
function getCircleArea(val) {
for (let i = 0; i < val; i++) {
doSomething(i);
}
}
function example(val) {
return getCircleArea(getCircleArea(val)
}
3.
逆
向
条
件
简
化
条
件
判
断
某
些
复
杂
的
条
件
判
断
可
能
逆
向
思
考
后
会
变
的
更
简
单
,
还
能
减
少嵌
套
。
before:
function checkAuth(user){
if (user.auth) {
if (user.name === 'admin') {
// ...
} else if (user.name === 'root') {
// ...
}
}
}
after:
function checkAuth(user){
if (!user.auth) return
if (user.name === 'admin') {
// ...
} else if (user.name === 'root') {
// ...
}
}
4.
合
并
条
件
简
化
条
件
判
断
将
冗
余
的
条
件
合
并
,
然
后
再
进
⾏
判
断
。
before:
剩余20页未读,继续阅读
两斤香菜
- 粉丝: 12
- 资源: 297
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0