良好的编程习惯--FlashCom Develop阅读笔记 (十八)

2006-03-09 00:47:17

本节内容概述了在使用actionscript编程和创建应用程序的时候需要遵循的一些规则,以及如何使我们的程序代码更有效和具有更好的可读性,更方便调试应用程序。 把这节写在前面,也是为了让开始接触ActionScript编程的开发人员从一开始就养成好的编程和开发习惯。 1. 遵循命名规则 一个应用程序的命名规划必须保持一致性和可读性。任何一个实体的主要功能或用途必须能够根据命名明显的看出来。因为ActionScript是一个动态类型的语言,命名最好是包含有代表对象类型的后缀。一般而言,名词_动词和形容词_名词之类的语法是最常用的命名方式,如: 影片名字:my_movie.swf URL实体:course_list_output 组件或对象名称:chat_mc 变量或属性:userName 方法和变量的名称应该以小写字母开头,对象和对象的构造方法应该大写。命名变量的时候使用大小写混和的方式,并且使用字母打头,还可以包含数字和下划线。 下面的一些命名是非法的: _count =5 ;//首字符不能使用下划线 5count = 0;//首字符不能使用数字 foo/bar = true;//包含非法字符 另外,ActionScript使用的保留字不能用来命名变量。 ActionScript是基于ECMAScript,所以我们可以根据ECMAScript的规范来命名。如, course_list_output = 'foo'; //全部小写,使用下划线分割字串 courseListOutput = 'foo'; // 大小写混和的方式 BASEURL = http://www.foo.com; // 常量使用全部大写 MAXCOUNTLIMIT = 10; MyObject = function(){ }; // 构造函数 f = new MyObject(); // 对象 注意;良好的命名规范还可以使用Flash的代码提示功能。 2. 给你的代码添加注释 使用代码注释能够使得程序更清晰,也便于我们阅读。Flash支持的代码注释方法有两种: 单行注释,通常用于变量的说明 var clicks = 0; // variable for number of button clicks 多行注释,通常用于功能说明和大段文字的注释: /* Initialize the clicks variable that keeps track of the number of times the button has been clicked. */ 一些具有特定意思的注释方法: // :TODO: topic 表明一个主题的开始 // :BUG: [bugid] topic 显示了一个BUG所在 // :KLUDGE: 表明下面的代码并不完善,可能存在问题 // :TRICKY: 告诉开发人员下面的代码具有相互作用,修改之前请谨慎 3. 保持代码的整体性 无论什么情况,应该尽可能保证所有代码在同一个位置,这样使得代码更容易搜索和调试。我们在调试程序的时候很大的困难就是定位代码,如果大部分代码都集中在同一帧,问题就比较好解决了。通常,我们把代码都放在第一帧中,并且单独放在最顶层。如果在第一帧中集中了大量的代码,记得用注释标记区分,并在开头加上代码说明。 1 : //=========================================== 2 : // 视频语音聊天系统 3 : // FCAVPresence组件 4 : // Copyright ◎2002 Macromedia, Inc. All rights reserved. 5 : // 完 善: Liu21st, Liu21st@126.com 6 : //--------------------------------------------------------- 在独立的功能模块前面加上类似的标注: 1 : //=========================================== 2 : // 参数初始化 3 : //--------------------------------------------------------- 4. 初始化应用程序 记得一定要初始化你的应用程序,init函数应该是你的应用程序类的第一个函数,如果使用面向对象的编程方式则应该在构造函数中进线初始化工作。该函数只是对应用程序中的变量和对象初始化,其它的调用可以通过事件驱动。 下面的例子可以说明如何进线初始化 1 : function FCAVPresenceClass() { 2 : this.init(); 3 : } 4 : FCAVPresenceClass.prototype.init = function() { 5 : this.name = (this._name == null ? '_DEFAULT_' : this._name); 6 : this.prefix = 'FCAVPresence.' + this.name + '.'; 7 : }; 5.使用局部变量 所有的局部变量使用关键字var来申明,这样可以避免被全局变量访问,更重要的是,可以保证变量不被覆盖和混淆程序逻辑。例如,下面的代码没有使用var来申明,覆盖了其它变量。 01 : counter = 7; 02 : function loopTest() 03 : { 04 : trace(counter); 05 : for(counter = 0; counter < 5; counter++) 06 : { 07 : trace(counter); 08 : } 09 : } 10 : trace(counter); 11 : loopTest(); 12 : trace(counter); 输出结果为: 7 7 0 1 2 3 4 5 6. 创建对象时使用原型添加方法和属性 当我们创建一个对象的时候,应当使用原型方式来添加对象的方法或属性,使得该方法或属性能够被所有该对象或子对象的实体所访问。这种能够确保内存中每个函数只有一份拷贝。作为一般的规则,不要在构造函数中定义方法。下面是一个正确的例子: 01 : // Best practice for creating an object 02 : MyObject = function() 03 : { } 04 : MyObject.prototype.name = ''; 05 : MyObject.prototype.setName = function(name) 06 : { 07 : this.name = name; 08 : } 09 : MyObject.prototype.getName = function() 10 : { 11 : return this.name; 12 : } 下面这段代码是不可取的: 01 : // Less desirable practice for creating an object 02 : MyObject = function() 03 : { 04 : this.name = ''; 05 : this.setName = function(name) 06 : { 07 : this.name = name; 08 : } 09 : this.getName = function() 10 : { 11 : return this.name; 12 : } 13 : } 使用上面的方式在每个对象的实体被创建的时候都会实体重新复制每一个属性和方法,会加重系统的内存开销。 7. 规范命名方式获取代码提示功能 这方面我已经有过详细的叙述,请看: [ actionscript代码提示功能 ]和 [ 面向对象方式的代码提示功能 ] 服务器端ActionScript的命名和搜索路径 当FlashCom Server端应用程序加载的时候,服务器会检查服务器端的ActionScript文件。 该文件可以位于application目录下或者其scripts子目录下,并且可以有多种命名方式。 通常,都放在application目录的应用程序目录下面,名称为main.asc。这是FlashCom Server默认的方式,但是,为了安全和管理起见,我们应该另外命名以更好的区分不同的应用程序。因此,使用<application_name>.asc的命名是一个良好的习惯,我们甚至可以使用js作为文件扩展名。 下面是服务器端Actionscript文件的搜索顺序: 1 : 位于/scripts目录下面的main.asc文件 2 : 位于目录下面的main.asc文件 3 : 位于/scripts目录下面的main.js文件 4 : 位于目录下面的main.js文件 5 : 位于/scripts目录下面的.asc文件 6 : 位于目录下面的.asc文件 7 : 位于/scripts目录下面的.js文件 8 : 位于目录下面的.js文件 在上面的搜索路径中,<appName>是指应用程序的目录名称 一般地,对于开发模式,该目录位置在C:\inetpub\wwwroot\flashcom\applications\<appName> 对于产品模式 默认位置为 C:\Program Files\Macromedia\Flash Communication Server\flashcom\applications\<appName>. 如果是Linux环境,应该是/opt/macromedia/fcs/application/<appName> 加载另外的Actionscript文件 如果要在服务器端ActionScript文件中加载另外的文件,需要使用Load命令 如load( 'logic.asc' ); FlashCom server 首先会在当前目录搜索logic.asc文件,然后再搜索 Application.xml (位于C:\Program Files\Macromedia\Flash Communication Server MX\conf\_defaultRoot_\_defaultVHost_\Application.xml或/opt/macromedia/fcs/conf/Application.xml)中<ScriptLibPath>标记指定的目录。 对于开发模式,该标记默认为 1 : C:\inetpub\wwwroot\flashcom\scriptlib 对于产品模式,默认为: 1: <ScriptLibPath>C:Program FilesMacromediaFlash Communication Server MXflashcomscriptlib</ScriptLibPath> 在Linux环境下,为 1 : /opt/macromedia/fcs/scriptlib 如果要指定多个搜索路径,可以用分号隔开