小学生系列之三——涂鸦板(高级)
一、功能描述
在初级涂鸦的基础上,增加颜色的可选范围——可以选择任意一种颜色,并显示选中的颜色。
二、组件
在初级涂鸦基础上添加三个数字滑动条、一个标签,并删除三个颜色按钮
重要提醒:删除组件时,如果希望保留与组件相关的代码,则需先将代码移植到别处,再删除组件,否则,与组件相关的代码会与组件一同被自动删除。
三、认识代码块
1、颜色合成
计算机可以处理任何类型的数据(数字、文本、逻辑、列表、颜色等等),但这些数据都将被转化成数字,严格地说,要转化成二进制数,才能最终被处理完成。在计算机中,颜色是数字合成的结果,如图所示,列表中的三个数字,自上而下分别代表红绿蓝三种颜色,最小值为0,最大值为255,图 1中的三个数字(255,0,0)合成的结果是红色。
图1 颜色合成块
我们将利用这个块来调出我们需要的颜色,每种颜色的取值来自于三个数字滑动条的滑块位置。
2、屏幕初始化
有些时候,我们希望应用启动时,将某些组件的属性设置成特定的值,例如,本项目中,我们用三个数字滑动条来调颜色,并用调色盘标签来(背景颜色)显示调色结果,而应用刚刚启动时,三个滑动条的滑块位置均为0,因此,我们希望调色盘的背景颜色能够表现出这一默认设置。这样的设置需要在屏幕初始化事件中完成,如图 2所示。
图2 屏幕初始化程序
这里用三个滑块的位置来替代具体的数字,此时,这三个值均为0,因此调色板显示为黑色。
3、滑块位置改变时,显示调色结果
图3 显示调色结果
4、创建有返回值过程
在图 3中,代码看起来及其相似,其中颜色合成块已经被使用了7次(屏幕初始化中1次),对于这样的代码,我们可以将它们写成一个过程,并在原来调用处,直接调用过程,如图 4所示。
图4 定义过程提高代码复用性
在上图中我们定义了一个有返回值的过程——合成色(将默认的“我的过程”改为“合成色”),直接将原来的合成颜色代码拖到过程定义块中,并用定义的过程替代原来的代码。那么从哪里取得这个“调用合成色”块呢?
一旦我们定义了新过程,就会在过程类代码块抽屉中自动添加调用这个过程的块,如图 5所示。
图5 过程类代码块抽屉中自动添加了调用过程块
5、创建无返回值过程
图4中的代码看起来还是很相像,三个数字滑动条的位置改变事件中,所运行的代码是完全相同的,有必要将它们定义为过程,并在滑块位置改变事件中调用该过程。我们为过程取名为“调色”,如图6所示。
图6 定义无返回值过程——调色
最后,别忘记将屏幕初始化程序中的代码改为调用“合成色”过程。
图7 在屏幕初始化程序中调用调色过程
四、编程技术
1、命名的重要性
写程序如同写剧本,主要角色的名字是非常重要的,只有那些跑龙套的角色才不需要名字,他们通常被称为“匪兵甲”、“匪兵乙”等等。
需要命名的有三类事物——组件、变量及过程。在本应用中,画布、照相机以及三个布局组件均采用了默认的命名,其中画布与照相机虽然也是主要“角色”,但因为项目中只有一块画布、一个相机,而默认的名称很好地表达了它们的功能,因此无须重新命名;布局组件在这个应用中是不折不扣的“龙套”,因此也无须重新命名;其余组件,都被赋予了一个有意义的名字,如滑动条的红色、绿色、蓝色,标签被命名为调色板,这些名称明确地表达了组件的用途,这样的命名使得代码具有了很好的可读性,即,读起来并不像程序,却像一篇短文。例如:“当绿色位置改变时,调色!”。
好的名字可以让我们在编写程序时,保持思路的清晰与顺畅,你一定不希望在自己才思如涌时,被蹩脚的名字绊住手脚。
2、过程的作用
过程的作用有三点:
提高代码的复用性:一段被多次重复使用的代码,一旦被封装为过程,即可直接调用过程,免去了重复书写代码的烦恼;
提高程序的稳定性:重复书写代码容易出错,尤其是在程序需要修改时,极有可能会忘记修改某处的代码,导致程序出错;
改善代码的易读性:如果你的过程命名贴切,那么阅读代码将不再是一件令人头疼的事情。
五、课后作业
是否可以用按钮来替代标签,充当调色盘?它们之间的优劣如何?
为什么应用中许多组件的宽度设为充满,这样做的好处是什么?