一段子程序的评论。。。。。。

Procedure HandleStuff ( Var InputRec:CORP_DATA,CrntQtr:integer, 

EmpRec:Emp_DATA, Var EstimRevenue:Real, YTDRevenue:Real,  

ScreenX:integer,ScreenY:integer,Var NewColor:Color_TYPE, 

Var PrevColor:COLOR_TYPE,Var Status:STATUS_TYPE, 

ExpenseType:integer); 

begin 

for i := 1 to 100 do begin 

InputRec.revenue[1]:= 0;   

InputRec.expense[i]:=CorpExpensse[CrntQtr,i]  

end;  

UpdateCorpDatabase(EmpRec);  

EstimRevenue:=YTDRevenue * 4.0 /real(CrntQtr) 

NewColor:=PrevColor; 

status:=Success;  

if ExpenseType=1 then begin 

for i:= 1 to 12 do 

Profit[i]:= Revenue[i]-Expense.Type[i] 

end 

else If ExpneseType= 2 then begin 

Peofit[i]:=Revenue[i] - Expense.Type2[i] 

end 

else if ExpenseType= 3 then 

begin 

Profit[i]:=Revenue[i] - Expense.Type3[i] 

end

end

 

这个子程序有什么问题?给你一个提示:你应该至少从中发现 10 个问题。当你列出所发现

的问题后,再看一下下面所列出的问题; 

·   程序的名字让人困惑。HandleStuff()能告诉我们程序是干什么的吗? 

·   程序没有被说明(关于说明的问题已经超出了个别子程序的范围,详见第 19章“自我        

说明的子程序”)。 

·   子程序的布局不好。代码的物理组织形式几乎没有给出其逻辑组织形式的任何信息。

布局的使用过于随心所欲,程序每一部分的布局都是不一样的。关于这一点。只要比        

较一下 ExpenseType=2 和 ExpenseType=3 两个地方的风格就清楚了 

·   子程序的输入变量值 InputRec 被改变过。如果它作为输入变量,那它的值就不该变        

化。如果要变化它的值,就不该称之为输入变量 InputRec。 

·   子程序进行了全局变量的读写操作。它从 CorpExpense中读入变量并写给 Profit。它应

该与存取子程序通信,而不应直接读写全局变量。 

·   这个子程序的功用不是单一的。它初始化了某些变量。对一个数据库进行写操作,又        

进行了某些计算工作,而它们又看不出任何联系。一个子程序的功用应该是单一,明        

了的。 

·   子程序中没有采取预防非法数据的措施。如果 CrntQtr 的值为“0” ,那么,表达式

YTDRevenue*4.0/real(CrntQtr)就会出现被零除的错误。 

·   程序中使用了几个常数:100, 4.0, 12, 2 和 3。关于“神秘”(magic)数的问题稍后解释。。。

  在程序中仅使用了域的 CORP_DATA 型参数的两个域。如果仅仅使用两个域,那就该

仅仅传入特定的域而不是整个结构化变量。 

·   子程序中的一些参数没有使用过。ScreenX和 ScreenY在程序中没有涉及。 

·   程序中的一个参数被错误标定了。PrevColor被标定为变量型参数,然而在程序中又没

有对其赋值。 

·   程序中的参数太多。程序中参数个数的合理上限应该是七个左右。而这个程序中则多

达 11 个。程序中的参数多得怕人,恐怕没谁会仔细检查它们,甚至连数一下都不愿意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值