友情提示:380元/半年,儿童学编程,就上码丁实验室。
在这次课前导部分的分析中,我们已经认识到了上节课中我们代码的“问题所在”,现在,我们就来解决这个问题。
我们再来看看那个我们“引以为傲”的函数(如下图),其最大的优点就是“非常智能”——只要告诉它画几条边,它就能毫不犹豫的画出大小合适的正多边形。
然而,说到这个函数的缺点嘛,那就是“太智能”——以至于我们只能决定正多边形的“边数”,而对其他的细节“无能为力”,比如说“边长”。我们无法通过设置正多边形的边长来决定画“多大的”正多边形,这样的函数用起来固然“省事”,但其“局限性”也是非常明显的。
为了使用户获得该函数更多的“控制权”,我们将函数稍加改变,在“函数定义”时增加一个参数“length”(边长),并把绘制每条边的长度由“程序自动计算”改为我们指定的边长“length”,如下图:
这个函数可以保证我们画出“指定边长的正多边形”。那有人说“如果用户把边长设置的太长,海龟就会画到画布外面去!”确实会存在这个风险,但这不是程序的错,我们把这个责任推给了“用户”——既然您想要关于正多边形更多的“话语权”,您就得对这个多边形负起更多的责任。权利与义务永远都是统一的!
现在,我们可以用这个新的“绘制正多边形函数”,来完成我们上节课的神奇图形了。我们将正N边形的“边长”统一设置为“40”,得到完整的代码如下图:
按“F5”键运行,您是否也得到下图中期盼已久的结果了呢?
通过对上次课的作业所做的深入分析,我们总结出了对于一个“绘制正多边形”程序来说最适合的参数——“边数”和“边长”。
我们这节课的主题叫“接口设计”。其实函数的所谓“接口”,就是“需要给函数提供哪些参数,以及函数返回什么值”。
海龟绘图这部分的函数不需要返回任何值,所以编写这类函数时,只要把用户需要给函数提供哪些参数设计好即可。
参数的“个数”也是很有讲究的——太少了不行,不便于用户控制函数的“行为”,就像我们之前那个“过于智能”的绘制正多边形的函数一样;太多了也不行,会给用户压上过重的负担,使用户“无所适从、苦不堪言”。
接下来,我们就设计一个“画圆”的函数,来说明“设计不当的过多参数”有何危害。
如果让您设计一个“画圆”的函数,您觉得哪些参数是必要的、哪些参数又是多余的呢?
提示:“圆”可以用边长较短、边数较多的正多边形来近似。
项目小结:
在今天的项目中,我们:
-
认识到了“老版本”的“绘制正多边形”程序的“问题所在”;
-
了解了“接口”的概念;
-
明白了定义函数参数时,“参数过少”的缺点;
-
学会了如何修改“绘制正多边形”程序的“接口”,使其能画出正确的嵌套图形。