细节决定品质:不良的if/else使用习惯
代码重构无处不在,重点滴做起。经常见到一些下面这样的代码:
1、不要拿bool和false直接比
if (false == IsXXX())
{
}
这是画蛇添足,费力不会讨好,直接了当即可:if (!IsXXX())
2、太多的if/else嵌套,导致过多缩进,造成眼花缭乱,阅读困难
if ()
{
if ()
{
if ()
{
if ()
{
if ()
{
}
else
{
}
}
}
}
}
这个时候应当考虑提取成函数调用,以减少直接的if/else嵌套层次。同理,while/for也应当避免这种情况。
3、if代码块过长,else代码块仅两三行,典型的头得脚本,造成阅读困难
if (A == B)
{
// 超过一屏的代码行
// 代码行1
// 代码行2
// 代码行3
// 代码行4
// 代码行5
// 代码行6
// 代码行7
// 代码行8
// 代码行9
// 代码行10
// 代码行11
// 代码行12
// 代码行13
// 代码行14
// 代码行15
// 代码行16
// 代码行17
// 代码行18
// 代码行19
// 代码行20
// 代码行21
// 代码行22
// 代码行23
// 代码行24
// 代码行25
// 代码行26
// 代码行27
// 代码行28
// 代码行29
// 代码行30
// 代码行31
// 代码行32
// 代码行33
// 代码行34
// 代码行35
// 代码行36
// 代码行37
// 代码行38
// 代码行39
}
else
{
// 两三行代码
// 代码行1
// 代码行2
// 代码行3
}
由于if代码块超过了一屏,会大大增加阅读代码的困难,特别是要找到if对应的else时,不得不非常小心。建议遇到这类代码时,将if和else代码块对调,会值得阅读代码容易许多,如下所示:
if (A != B)
{
// 两三行代码
// 代码行1
// 代码行2
// 代码行3
}
else
{
// 超过一屏的代码行
// 代码行1
// 代码行2
// 代码行3
// 代码行4
// 代码行5
// 代码行6
// 代码行7
// 代码行8
// 代码行9
// 代码行10
// 代码行11
// 代码行12
// 代码行13
// 代码行14
// 代码行15
// 代码行16
// 代码行17
// 代码行18
// 代码行19
// 代码行20
// 代码行21
// 代码行22
// 代码行23
// 代码行24
// 代码行25
// 代码行26
// 代码行27
// 代码行28
// 代码行29
// 代码行30
// 代码行31
// 代码行32
// 代码行33
// 代码行34
// 代码行35
// 代码行36
// 代码行37
// 代码行38
// 代码行39
}
当然更佳的习惯,是不要有过长的代码块,应当考虑封装成函数。