August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
当测试完计算器程序后,你会发现它不能很好地处理负数。例如,输入
将返回一个错误信息,必须将其写为
但这并不符合人们的使用习惯。
在程序调试和测试后期发现这样的问题是很平常的事,只有这时我们才能有机会弄清楚程序到底实现了什么功能,并根据程序给出的反馈不断改进我们的设计。在程序的设计过程中,一种明智的做法是:在安排工作日程时就预留出时间,使我们能有机会体会开发过程中获得的经验教训,从中受益,回过头来改进程序。“1.0版”往往未经必要的精化就发布了,这通常是由于开发日程过紧,或者是为了防止在项目“后期”对详细设计进行修改而采取的呆板的项目管理策略造成的——“后期”添加“特性”将会是灾难性的。但实际上,当一个程序对于简单使用来说已经足够好,但还未到可以发布的程度时,开发进程还远未到“后期”。此时还是开发进程的“早期”,正是我们从程序中获取实实在在的经验教训、进行改进的好时机。在实际安排工作日程时,应该将这样的过程考虑其中。
对于本例,我们只需修改文法来处理负号。最简单的方式是修改Primary的定义,将
改为:
我们还增加了一元加运算符,C++语言也支持这个运算符。当有了一元减后,人们通常也会尝试一元加,因此实现它是有意义的。而且既然实现了一元减,实现一元加也很容易,没有必要纠缠于它到底有没有用。于是,实现Primary的函数变为 ...