学习一门技术,比较系统的途径仍然是书籍。然而教程书籍有时提供的范例并没有推荐良好的编程习惯,使读者走了不少的弯路。7yue这篇博文便是就ActionScript3编程书籍的一些常见情况来描述这一问题。
现在开始接触ActionScript3编程的爱好者越来越多,他们可以选择从不同的角度来学习ActionScript3编程:书籍,教程,博客,开放源码项目等等。我最近发现一个有趣的现象,就是AS3的部分教程中都存在一个小问题,就是当面向初学者提供某些范例和教程时,这些内容并未从良好的编程经验或者是习惯入手,而是寄期望于日后的学习中,再了解更好的,更加值得使用的方法,我在想,为什么很多教程或文章不能一开始就提供***实践相关的内容给爱好者呢?这样,既提高了学习的效率,也减少了学习的弯路。
比如,下列的一小段代码出自某本O'Reilly的书籍
书中这段代码目的是让开发者了解AS3在SWF中的处理优先级是大于可视化效果的,于是,就先用这样的一段代码来说明:
- for (var i:int = 0; i<50; i++){
- myClip.x+=2;
- }
这段代码为了说明在循环中,MC的位置根本就不会按照for循环一样,呈现x坐标的递加,而是直接跳转到***循环结束时x坐标的位置上去,这其实没什么问题,但是下面的代码,则是说,开发者可以使用Event.ENTER_FRAME事件来触发一个侦听函数,在侦听函数中处理一个MC的移动。
- myClip.addEventListener(Event.ENTER_FRAME,slideClip);
- function slideClip(evt:Event):void{
- if (myClip.x <100){
- myClip.x += 2;
- } else {
- myClip.removeEventListener(Event.ENTER_FRAME,slideClip);
- }
- }
开发者在学习这段代码的时候,尤其是初学者,就对Event.ENTER_FRAME有了深刻的印象,于是乎,随着他的学习曲线,以后对于AS3中对于MC的动态处理,他们自然而然的就会不断的用到ENTER_FRAME,甚至于不断的将各种处理机制都放入其中。结果显而易见,大量的应用性能和灵活性问题随之而来,或许在若干长的时间过后,才听到有讲座说,ENTER_FRAME是一个不推荐的编程方式,更推荐大家用Timer云云之类的说法。
这些类似的教程内容本身没有什么错,为了演示一个功能或特点,使用了最容易实现的方法来说明问题,如果这是一个售前工程师的工作,那么这种方式是***的,如果是面向读者和学习的人,这种方法是粗心的,不考虑学习成本和效率的,因为它直接导致了开发者的常用编程方式,直到开发者积累了一定的经验,抑或是付出了一定的代价之后,才会发现有更好的方式,更加的性能来实现同样的结果。所以,如果写书或者是教程,我觉的更好的一点是多考虑一下学习者的成本和曲线,不要为了达到目的,而让学习者获取了一个实际并不可取的方法。
记得以前我就发现过这样的问题,在MSDN上,存在着大量的代码和范例,结果用到后来,才发现是不好的和有很大代价的内容,我就在想,为啥不能在我学习的时候就告诉我一个更好的方法呢?
【编辑推荐】