14章 组织直线型代码 15章使用条件语句php
1.必须有明确顺序的语句数组
所谓明确顺序的语句即语句执行必须按照必定得次序,它们之间是顺序相关的,例如:函数
$data = ReadDate(); $result = Calculate($data); PrintResult ($result);
以上三条语句的执行顺序是重要的,不可能变换顺序执行,只有读取数据后才能计算,而打印语句是不能在计算完毕前进行的。spa
若是语句之间有着依赖关系,那么须要采用方法使得这些依赖关系变得明显。code
1)设法组织代码,使依赖关系变得明显。input
2)使子程序名可以凸显依赖关系。it
良好的命名习惯有利于显示化程序之间的顺序。(好比开头那段代码)io
3)利用子程序参数明确显示依赖关系。function
经过重写代码让数据以参数的方式在子程序之间传递。例如:class
$result = 0; ComputeMonthly();//计算月度 ComputeQuarterly();//计算季度 ComputeAnnualy();//计算年度
这段代码顺序是,首先计算月度,而后计算季度,最后计算年度,每一个计算依赖其以前的计算结果,每一个计算子程序均重写$result的值,而后下一个子程序使用它。为了使顺序更加明显,能够采用以下的改进:
$result = ComputeMonthly($result);//计算月度 $result = ComputeQuarterly($result);//计算季度 $result = ComputeAnnualy($result);//计算年度
4)用注释对代码进行说明。
若是依赖关系不够明显,那么能够考虑使用注释的方式来对代码进行说明。
5)使用断言或者状态标志变量来标志语句执行顺序。
可使用变量标识语句执行顺序,例如:
$order_flag = 0; ReadDate() { 。。。 $order_flag = 1; } Calculate() { if($order_flag == 1) { 。。。ok } else { error; return error; } $order_flag = 2; } PrintResult () { if($order_flag == 2) { 。。。ok } else { error; return error; } $order_flag = 3; }
然而,因为引入了新的变量,致使代码出错的可能性增长,所以,若非万不得已,不建议采用此方法。
2.顺序无关的语句
顺序无关的语句即执行顺序没有依赖关系的若干语句。
良好地组织这些语句有利于代码阅读,尽可能避免在进行代码阅读的时候目光跳来跳去。
应当把相关的语句组织在一块儿,例以下面的代码:
组织很差的代码:
ComputeWorkerTotalNum();
ComputeBossAverageRevenue(); ComputeWorkerAverageRevenue(); ComputeBossSales(); ComputeWorkerExpense();
应当组织为:
ComputeWorkerTotalNum(); ComputeWorkerAverageRevenue(); ComputeWorkerExpense(); ComputeBossAverageRevenue(); ComputeBossSales();
3.if条件语句
1)编写if语句的时候应当遵循的原则。
a:首先写正常代码路径,再处理不常见的状况。
b:确保对于等量的分支是正确的(边界点状况)。
注意不要使用 ">" 代替 ">=" 或者"<"代替"<=",(这相似于当心避免数组或者循环的off-by-one错误)
c:把正常状况的处理放在if后面,而不要放在else后面。下面是一个示例:
糟糕实践:
if(inputError) { 处理错误 } else { 正确状况 } if(!processError) { 正确状况 } else { 处理错误 } 为了有更好的可读性,这段代码应当改为: if(!inputError) { 正确状况 } else { 处理错误 } if(!processError) { 正确状况 } else { 处理错误 }
这样处理后的代码可使代码的阅读者将注意力集中到代码正常处理的流程上而不是异常错误的处理流程。
d:利用布尔函数调用简化复杂的检测。例如:
if(!error() && inputRight() && age==1987 ........) { do sth。。。。 } 能够改为: function check() { 进行校验 return 布尔值 } if(check()) { do sth。。。 }
2)case语句
case语句在某些状况下能够代替多条if-else语句
a:为case选择排列顺序
按字母顺序或者按数字顺序排列各类状况
把正常的状况排在前面
按照执行频率排列case子句
常常执行的状况排在最前面,最不常常执行的状况排在最后面。
b:使用case语句的诀窍
<1>简化每种状况对应的操做。
若是某种状况执行的状况很是复杂,那么就写一个子程序,并在该状况对应的case中调用,而不要把操做代码段自己放在这个case子句中。
例如:
case 'ok': 。。。。。 。。。。。 。。。。。 break; 能够改写成: function do_sth() { 。。。。 。。。。 } case 'ok': do_sth(); break;
<2>不要为了使用case语句而能够制造一个变量。
<3>把default子句只用于检查真正的默认状况。
例如:case的可能状况有1-3
则很差的代码:
case 1: 。。 break; case 2: 。。 break; default: .......
<4>利用default子句来检测错误。
例如:case 有1-4可能
case 1: 。。 break; case 2: 。。 break; case 3: 。。 break; case 4: 。。 break; default: 输出错误信息