FLEX编码规范_第1页
FLEX编码规范_第2页
FLEX编码规范_第3页
FLEX编码规范_第4页
FLEX编码规范_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Flex编码规范产品源代码质量检测:FLEX编码规范(A0)目录前言IV产品代码质量检测:FLEX编码规范11 概述12 文件引用及参考13 命名规则13.1 文件命名13.1.1 ActionScript13.1.2 MXML文件名13.1.3 CSS13.2 包命名23.3 类命名23.4 接口命名23.5 变量命名23.6 方法命名23.7 参数命名33.8 事件命名33.9 命名空间33.10 MXML标签ID命名34 注释规则34.1 源文件注释44.2 类/接口注释44.3 方法注释44.4 方法内部注释54.5 单行注释54.6 MXML文件注释55 排版规则55.1 Acti

2、onScript55.1.1 文件结构55.1.2 缩进65.1.3 行与换行65.1.4 空行与空格75.1.5 声明75.1.6 语句85.2 MXML105.2.1 文件结构105.2.2 缩进115.2.3 行排版115.2.4 标签属性116 性能优化126.1 使用共享库(RSL)减少SWF文件的大小126.2 对象销毁126.3 使用常量和静态方法136.4 集合的应用136.5 从外部加载媒体136.6 在嵌入式字体中限制字符集136.7 其他建议137 安全性要求148 附录148.1 一致性约束148.2 关键字158.2.1 词汇关键字158.2.2 语法关键字158.2

3、.3 未来保留关键字15前言产品代码质量检测:FLEX编码规范1 概述本规范适用于公司产品Flex程序的开发。2 文件引用及参考ProgrammingFlex3 中文版,Chafic Kazoun, Joey Lott.Flex 3 Cookbook 中文版,Joshua Noble, Todd Anderson.ActionScript 3.0 编程精髓,Colin Moock.ActionScript 权威指南,Colin Moock.国家电网公司Flex编码规范。3 命名规则3.1 文件命名3.1.1 ActionScript1)类文件规则:名字由英文单词或明确意义的缩写组成,首字母必须

4、大写,使用驼峰式命名规则。示例:ExampleClassName.as2)接口文件规则:遵循类命名规则,接口以I开头,后面写接口名。示例:IExampleInterface.as3.1.2 MXML文件名规则:遵循ActionScript中类文件命名规则。示例:ExampleClassName.mxml3.1.3 CSS规则:名字由英文单词或明确意义的缩写组成,首字母必须小写,使用驼峰式命名规则。示例:eicSkin.css3.2 包命名规则:名字由英文小写单词或单词缩写组成,对于不便于翻译的中文可以使用汉语拼音缩写。定义:包名:com.sgcc.nrxt.产品英文缩写.子包名或包名: com

5、.nrxt.产品英文缩写.子包名。其中:com:常量,表示组织。com.sgcc.nrxt:常量,表示由国网统推项目驱动的产品开发。com.nrxt:常量,表示公司自主产品开发。产品英文缩写:按照公司产品命名规则确定的产品英文缩写,如:pi3000、pms、tms、ims、oms等。子包名:由项目组自行定义。示例:com.sgcc.nrxt.pms.dwzycom.nrxt.pi3000.dataaccess3.3 类命名规则:名字由英文单词或明确意义的缩写组成,首字母必须大写,应使用用名词,应能准确体现类的职责。示例:public class ApplicationController3.4

6、 接口命名规则:遵循类命名规则,接口以I开头,后面写接口名。示例:public interface IResponse3.5 变量命名1)类实例变量规则:名字由代表业务的英文单词或明确意义的缩写组成,使用首字母小写的形式驼峰式命名规则,如果变量使用getter和setter方法读/写值,开头应加上下划线(_)。示例:private var _rowSet:Array;2)局部变量规则:遵循类实例变量命名规则。示例:var rowSet:Array;3)静态变量规则:静态变量全部使用大写字母,单词间用下划线分割(_)。示例:public static const var SELECTTYPE_R

7、ADIO:String = "radio"3.6 方法命名1)私有方法规则:名字由代表业务的英文单词或明确意义的缩写组成,应以动词开头,首字母小写,应能准确体现方法的职责。示例:private function createCache(var chacheName:String):void;2)公用方法规则:遵循私有方法的命名规则。示例:public function createCache(chacheName:String):void;3)属性方法规则:与对应的私有成员名称相同,但需要以get/set作为方法前缀。示例:public function get rowSe

8、t():Array return this._rowSet; public function set rowSet(rowSet:Array):voidthis._rowSet = rowSet;3.7 参数命名规则:首字母小写,避免与类型私有成员或局部变量重名。示例:public function createCache(chacheName:String): void;3.8 事件命名规则1:触发事件的方法以“on”作为前缀,再拼接对应事件名称。示例:public function onDataChanged():void;规则2:事件响应的方法以“Handler”作为后缀,拼接对应事件名

9、称。示例:public function dataChangedHandler(event:ResultEvent):void;3.9 命名空间规则:命名空间全部使用小写字母,单词间用下划线分割。文件名必须与命名空间名称一致。示例:namespace flash_proxy = “3.10 MXML标签ID命名规则:MXML标签ID一般使用首字母小写的驼峰式命名规则,并且使用有意义的名称。示例:<mx:Panel id="pnLoginInfo" title="VBoxContainerExample" />4 注释规则代码注释规范采用ASD

10、oc的代码注释标记方法,需要对类,静态变量,实例变量,方法进行注释以便准确表达类、变量和方法的功能;对方法内复杂的业务逻辑也需要添加单元注释或者块注释,以增强程序可读性。边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。无用的注释要删除,注释的内容要清楚、明了,含义准确,防止注释二义性。避免在注释中使用缩写,特别是不常用的缩写。在注释中使用FIXME关键字来标识某些需要修正的代码,使用TODO标识某些在重构时需要改良的代码。注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面。4.1 源文件注释规则:所有的程序文件应该以注释开始

11、,在注释中列出系统名称、版权信息、版本信息、作者、重大功能变更日志等内容。 示例:ActionScript文件:/* *PI3000*Copyright(C)2000-2008 NARI Information and CommunicationTechnology Branch. All *rights reserved.*版本信息:PI3000-V1.000-002*版本日期作者变更记录*PI3000-V1.000 2007/02/23张三新建*PI3000-V1.000-002 2009/02/01李四增加saveBusinessData2方法 */MXML文件:<?xml ver

12、sion="1.0" encoding="utf-8"?><!-*PI3000*Copyright(C)2000-2008 NARI Information and CommunicationTechnology Branch. All *rights reserved.*版本信息:PI3000-V1.000-003*版本日期作者变更记录*PI3000-V1.000 2007/05/20 张三新建*PI3000-V1.000-002 2009/04/21 李四增加GIS控件复选框*作者:张三*创建时间:2007/02/20->4.2 类

13、/接口注释规则:描述作者信息、创建时间、版本信息等,类功能,主要算法逻辑、类调用特殊情况等。示例:/* *概述:OSGi规范中Bundle的激活器 *功能:dm本身既是一个Bundle,又是其他基于这种技术的动态模块的解析引擎。 *作者:张三 *创建时间:2014-03-13 *类调用特殊情况:无 */public final class Activator implements BundleActivator 4.3 方法注释规则:描述方法功能或者算法逻辑、输入、输出及返回值,其中返回值说明要详细,包括返回的类型,方法执行成功返回类型,方法执行失败返回类型,如果返回值是集合,还要说明集合中每

14、个元素类型。示例:/* * 功能:根据种类代码ID,取得一个种编码 * param kindId 要取得的种类代码的ID * return ICode*/ public function getCode(kindId:String):Code4.4 方法内部注释规则:方法内部的关键变量、语句和修改变更信息需要加以注释,采用块注释或者行注释。4.5 单行注释规则:单行注释是指在一行内就能写完的注释,之前应该有一个空行。示例:if (condition) /Handle the condition. .尾端注释使用场合:极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和

15、注释。示例:if (a = 2) return true; /* special case */ else return isPrime(a); /* works only for odd a */4.6 MXML文件注释MXML文件中的注释和XML文件注释一样,使用<!- 注释->。示例:<!-Button标签-><mx:TabNavigator><mx:Container><mx:Button /></mx:Container></mx:TabNavigator>5 排版规则5.1 ActionS

16、cript5.1.1 文件结构ActionScript文件按如下顺序组织各元素:序号元素备注1开篇注释2定义包3声明命名空间 如果存在命名空间,这是最后部分4Import 描述:1) flash包中的类2) mx包中的类3) com.adobe包中的类4) 第三方包中的类,按字母顺序排序 5) 项目的包中的类6) 属于该文件的工程包 使用完整的引用名,不要使用星号(*),除非使用了包的绝大部分。 推荐使用:importmx.core.Application 避免使用:importmx.core.*按字母顺序排序; 如果导入命名空间,同名的包要先于类5use 声明(命名空间)按字母顺序排序6元数

17、据 1) Event 2) Style 3) Effect 4) 其他元数据,按字母顺序排序7定义类和接口8静态变量(static) 1) public a) const b) 其他public static 2)internal 3) protected 4) private 5) 自定义命名空间(按字母顺序排序)9没有使用 getter 和 setter 的变量 1) public 2) internal 3) protected 4)private5) 自定义命名空间(按字母顺序排序)10构造函数11方法将实现相关功能方法组织在一起,而不是按作用域12用getter和setter处理的变

18、量和方法本身,还有相关的变量5.1.2 缩进使用4个连续空格缩进。5.1.3 行与换行建议一行的最大字符数在120150个字符之间。 注意:用于文档中的例子应该使用更短的行长,长度一般不超过120个字符。如果一段描述不能放在一行中,依据下列规则将其拆分成多行:1)从逗号后换行。2)在运算符之前换行。3)最好在较高级别代码处换行。4)换行后缩进依赖美观程度决定。5.1.4 空行与空格1)空行下列情况应该使用两个空行:a)一个源文件的两个片段(section)之间。b)类声明和接口声明之间。下列情况应该使用一个空行:a)两个方法之间。b)方法内的局部变量和方法的第一条语句之间。c)一个方法内的两个

19、逻辑段之间。2)空格下列情况应该使用空格:a)一个紧跟着括号的关键字应该被空格分开。示例:while (true) .注意:空格不应该置于方法名与其左括号之间。这将有助于区分关键字和方法调用。b)参数列表中逗号的后面应该加空格。c)所有的二元运算符,除了“.”,应该使用空格将之与操作数分开。一元操作符和操作数之间不 应该加空格,比如:负号(“-”)、自增(“+”)和自减(“-”)。示例:a += c + d;a = (a + b) / (c * d);while (d+ = s+) n+;d)for语句中的表达式应该被空格分开。示例:for (expr1; expr2; expr3)5.1.5

20、 声明每行只有一个声明要优于一行多个声明。示例:优:var a:int = 10; var b:int = 20;劣:var a:int = 10, b:int = 20;1)初始化尽量在声明局部变量的同时初始化。2)布局只在代码块的开始处声明变量(一个块是指任何被包含在大括号“”和“”中间的代码),不要在首次用到该变量时才声明,否则,会妨碍代码在该作用域内的可移植性。示例:private function myMethod():void var int1:int = 0; / beginning of method blockif (condition) var int2:int = 0;

21、/ beginning of "if" block.该规则的一个例外是for循环的索引变量。示例:for (var i:int = 0; i < maxLoops; i+) . 避免声明的局部变量覆盖上一级声明的变量。例如,不要在内部代码块中声明相同的变量名。示例:var count:int;.myMethod():void if (condition) var count:int = 0; / AVOID!.3)类/接口声明当编写类和接口时,应该遵守以下格式规则:a)在方法名与其参数列表之前的左括号“(”间不要有空格。b)左大括号“”位于声明语句同行的末尾。c)右大

22、括号“”另起一行,与相应的声明语句对齐,除非是一个空语句:“”应紧跟在“”之后。示例:public class Sample extends Object var ivar1:int;var ivar2:int;public Sample(i:int, j:int) ivar1 = i;ivar2 = j;public function emptyMethod():int .5.1.6 语句1)简单语句简单声明每行只能有一个,并以分号作为结束。示例:i+; setModel();2)复杂语句复杂语句是包含在大括号中的语句序列,形如“ 语句 ”。例如下面各段:a)被括其中的语句应该较之复合语句缩

23、进一个层次。b)左大括号“”应位于复合语句起始行的行尾;右大括号“”应另起一行并与复合语句首行对齐。3)返回语句一个带返回值的return语句不使用小括号“()”,除非它们可以使返回值更为显见。示例:return;return myDisk.size();return (size ? size : defaultSize);4)if语句if-else语句格式如下:示例:if (condition) statements;if (condition) statements; else statements;if (condition) statements; else if (condition

24、) statements; elsestatements;注意:if语句总是用“”和“”括起来,避免使用如下容易引起错误的格式:示例:if (condition) /AVOID! THIS OMITS THE BRACES !statement;5)for语句for语句格式如下:示例:for (initialization; condition; update) statements;一个空的for语句(所有工作都在初始化,条件判断,更新子句中完成)应该具有如下格式:示例:for (initialization; condition; update);当在for语句的初始化或更新子句中使用逗号

25、时,避免因使用三个以上变量,而导致复杂度提高。6)for each语句for each语句格式如下:示例:for each(var item:Object in array) statements;7)while语句while语句格式如下:示例:while (condition) statements;一个空的while语句应该具有如下格式:示例:while (condition);8)do-while语句do-while语句格式如下:示例:do statements; while (condition);9)switch语句switch语句应该具有如下格式:示例:switch (condit

26、ion) case ABC:statements;/* falls through */case DEF:statements;break;case XYZ:statements;break;default:statements;break;每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。上面的示例代码中就包含注释/* falls through */。10)try-catch-finally语句try-catch-finally语句应该具有如下格式:示例:try statements; catch (Error e) statements;fi

27、nallystatements;11)三元操作符可以使用三元操作符代替简单的if/else逻辑,尤其是对null进行判断的时候,建议不要采用嵌套的三元操作符。三元操作符可具有如下格式:示例:b = (expression) ? expression : gamma;/对齐! c = (expression) ? beta : gamma;d = (expression) ? A : B;5.2 MXML5.2.1 文件结构MXML文件按以下顺序组织各元素:序号元素备注1XML 文件头 <?xml version=”1.0” encoding=”UTF-8” ?>总是在文件头中定义编

28、码,并且总是使用UTF-8 编码2开篇注释3根标签必须包含文件中使用到的所有命名空间4元标签 1)Event2) Style 3)Effect 4) 其他元标签,按字母顺序排列5定义样式尽量使用外部样式文件6定义脚本只能存在一个脚本块7非可视组件8可视组件5.2.2 缩进使用4个连续空格缩进,子组件必须依据其父组件进行缩进排版。示例:<mx:TabNavigator><mx:Container><mx:Button /></mx:Container></mx:TabNavigator>5.2.3 行排版在一组可视组件之间插入空白行可使

29、代码更清晰,在同一个父组件的子组件之间(也包括他们的子组件)插入空白行。示例:<mx:series><mx:ColumnSeries yField="prev" displayName="Forecast"><mx:stroke><mx:Stroke color="0xB35A00" /></mx:stroke><mx:fill><mx:LinearGradient angle="0"><mx:entries><m

30、x:GradientEntry. /><mx:GradientEntry. /></mx:entries></mx:LinearGradient></mx:fill></mx:ColumnSeries><comp:ColumnSeriesComponent /></mx:series>5.2.4 标签属性MXML组件的标签属性按下列顺序排序: 1)属性。2)事件(Events)。3)样式(Style)。4)效果(Effects)。如果有id,永远放在第一位,width,height和styleName是属

31、性而不是样式。示例:<mx:ViewTack id=”mainModules” width=”75%” height=”75%” />标签属性如果放在多行要进行缩进。示例:<mx:Label width="100%" height="100%" truncateToFit="true" text="Herecome" />如果标签的声明有多行,处在第一行的永远只有id 一个属性,其他属性按上面的顺序放在其他行中。示例:<mx:ViewStack id="mainModules

32、" height="75%" width="75%" paddingTop="10" paddingLeft="10" paddingRight="10">同一类的属性放在一行。示例:<mx:Panel title="VBoxContainerExample" status="Somestatus" hide="doSomething()" creationComplete="doSomething()&

33、quot; paddingTop="10" paddingLeft="10" paddingRight="10" resizeEffect="Resize"/>在同类属性需要放入多行的情况下,将更为相近的属性放入同一行。示例:<mx:Panel id="pnLoginInfo" title="VBoxContainerExample" height="75%" width="75%"resize="resizeHa

34、ndler(event)"titleStyleName="titleLogin" headerHeight="25"paddingTop="10" paddingLeft="10" paddingRight="10" />6 性能优化6.1 使用共享库(RSL)减少SWF文件的大小当应用中多个Flex程序使用相同的组件库时,建议采用RSL的编译方式,减少SWF文件的大小。6.2 对象销毁1)及时销毁对象函数级别变量、实例变量必须使用var关键字声明,避免变量自动提升为全局变量,全

35、局变量不能随对象的销毁而消亡。在页面销毁的时候要把类级别的变量一并销毁。简化对象间的关系,尽量不要出现类和类之间的双向引用,在双向引用不可避免的情况下,必须及时置空引用和被引用对象,以免对象不能回收,造成内存溢出。2)及时移除事件监听,或者变成弱引用示例:对象弱引用:someObj.addEventListener("eventName",listenerFunction,useCapture,priority,weakReference); stage.addEventListener(Event.CLICK,handleClick,false,0,true); 将第五个

36、参数设置为true,对一些不想永久保存的事件侦听函数,使用弱引用(如Timer)。或者手动的将监听移除:示例:stage.removeEventListener(Event.CLICK,handleClick); 3)销毁对象引用弹出框中声明且使用了Bindable标签的对象,在弹出框关闭时建议将这些对象的引用清除,同时对外部资源(如图片)的引用清除,置空。示例:Bindable/* *参数说明:声明了国家代码下拉列表 */public var countryCodeList:ArrayCollection; 在关闭窗口时:/* * 方法说明: * 关闭窗口 */public function

37、 closeWindows():void this.countryCodeList=null; EicMask.hideMask(); PopUpManager.removePopUp(this); 6.3 使用常量和静态方法系统中使用到的变量及一些常用方法,尽量静态化和常量化,避免对象创建时大量重复执行耗用内存。6.4 集合的应用采用集合组件+变量绑定的方式在销毁对象时先销毁集合对象。此外,集合中封装了大量实体对象,查询结束后应及时清除集合体,或将被引用对象做置空处理。6.5 从外部加载媒体为了让用户能够更快地加载到Flex程序,应限制嵌入到应用/SWF文件中的媒体的数量。图像、影片及mp3

38、等资源可以从外部的SWF文件加载。6.6 在嵌入式字体中限制字符集只有在需要使用指定字符集时,才将其嵌入SWF文件,并且必须在嵌入的字体集中限制字符集的数据。6.7 其他建议1)在局部变量够用时,不要使用全局变量。类静态变量也要少用。必须使用全局变量时,新建独立的类对全局变量进行管理,并且该类不可实例化。2)读取数组中的数据,尽量使用for in循环来代替传统的for或者while循环语法。其次是选择while循环,传统for循环语法的效率在三者中是最低的。向数组中写入数据,while循环稍占优势。3)能用单行赋值则使用单行赋值。比如:a = 0b = 0c = 0效率不如:a = b = c = 04)不要过多使用Object类型,只有在没有适当的备选数据类型时,才使用 Object 类型。5)尽量避免使用eval()函数或数据访问运算符。6)在用到矢量图时,尽量简化其的形状,去除多余端点。这样将大大降低播放器用于呈现矢量图所要进行的计算量。7)需要呈现比较复杂的场景时,最好考虑使用位图实现。建议flash中的位图都尽可能采用PNG格式。8)运用线条时,尽量减少和避免冗余的线条结构,它们会直接影响到flash的播放效率。9)当某个实例透明度小于1时,也会对播放速率造成影响。10)尽量使用单独一个onEnterFrame事件,因为如果给过多的MoveClip添加这样

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论