AS3的官方规则(二)—语句篇
Posted by admin | Filed under Resource Sharing
| Hot: |
声明:本文来自9ria.com天地会
语言使用
这部分我们讨论一下AS3语法的使用。特别是遇到一种功能多种表达的情况。
类型声明
为每一个常量、变量,函数参数,函数返回值都注明类型。如果是任意类型,请注明“*”。
像这样:
var value:*;
不要这样:
var value;
使用最合适的类型。举个例子来说,一个循环变量的类型应该是int,而不是Number,更不是Object或者*。再者,一个侦听器mouseDownHandler的参数类型应该是event:MouseEvent而不是event:Event。
整数就应该是int类型,即使它非负。而uint仅仅用在RGB的颜色变量、位屏蔽和其他非数值量。
只有当量的类型无法确定时用*,其值应该是undefined。当然,用Object比*要好。null是用来表示对象的值不存在的。
如果你声明一个Array型量,在Array字样后加上一个注释来表明其数组种类。以后的AS版本很可能会加入类型化数组。
像这样:
var a:Array /* of String */ = [];
不要这样:
var a:Array = [];
像这样:
function f(a:Array /* of Number */):Array /* of Object */
{
…
}
不要这样:
function f(a:Array):Array
字面量
undefined
不到万不得已不要使用这个。只有在量类型无法确定使用*类型时,才用它赋值。当然我们对于*的使用也应该是非常谨慎的。
int和uint字面量
使用整型的时候不要加小数点
像这样:
2
不要这样:
2.
十六进制的数用小写的x和大写的ABCDEF表示
像这样:
0xFEDCBA
不要这样:
0Xfedcba
写RGB颜色变量时总是用六位十六进制数表示。
像这样:
private const BLACK:uint = 0×000000;
不要这样:
private const BLACK:uint = 0;
处理索引时,用-1表示找不到索引。
Number字面量
如果一个Number可以作为小数,那么在这个数值后面加上小数点和一个0。
像这样:
alphaFrom = 0.0;
alphaTo = 1.0;
不要这样:
alphaFrom = 0;
alphaTo = 1;
当然,坐标不要像这样赋值,因为坐标原则上说都应该是整数。
像这样:
var xOffset:Number = 3;
不要这样:
var xOffset:Number = 3.0;
表示指数时,用e不要用E。
像这样:
1.0e12
不要这样:
1.0E12
用NaN来为为赋值的Number赋初始值。
String 字面量
一定要使用双引号,即便字符串只有一个字符,也不要使用单引号。
像这样:
“What’s up, \”Big Boy\”?”
不要这样:
‘What\’s up, “Big Boy”?’
用 \u而不要用 \U来表示 unicode 字符。
Array 字面量
使用Array的字面量而不要用new Array()。
像这样:
[]
不要这样:
new Array()
像这样:
[ 1, 2, 3 ]
不要这样:
new Array(1, 2, 3)
仅仅在分配数组大小的时候使用Array的构造函数,如new Array(3)。
Object 字面量
使用Object的字面量而不要用new Object()。
像这样:
{}
不要这样:
new Object()
像这样:
o = { a: 1, b: 2, c: 3 };
不要这样:
o = new Object();
o.a = 1;
o.b = 2;
o.c = 3;
function 字面量
避免使用function字面量来定义大量函数,尽量使用类方法或者包函数。如果一定要使用function字面量,声明其返回值,在语句块最后的语句后加上分号。
像这样:
function(i:int):void { doIt(i – 1); doIt(i + 1); }
不要这样:
function(i:int) { doIt(i – 1); doIt(i + 1) }
RegExp(正则表达式) 字面量
使用字面量而不要使用构造函数构造一个正则表达式实例。
像这样:
var pattern:RegExp = /\d+/g;
不要这样:
var pattern:RegExp = new RegExp(“\\d+”, “g”);
XML 和 XMLList 字面量
使用字面量而不要使用构造函数构造一个实例。
像这样:
var node:XML =
不要这样:
var node:XML = new XML(“
XML中的属性要用双引号而不要用单引号。
像这样:
var node:XML =
不要这样:
var node:XML =
Class 字面量
只有在有必要区分具体类的时候才使用类的完全修饰路径。
像这样:
import mx.controls.Button;
…
var b:Button = new Button();
不要这样:
import mx.controls.Button;
…
var b:Button = new mx.controls.Button();
但这种情况下,类的完全修饰路径就是必须的:
import mx.controls.Button;
import my.controls.Button;
…
var b:Button = new mx.controls.Button();
表达式
小括号
不要在一些常见的运算符上加小括号,如+、-、*、 /、 &&、 ||、 <、 <=、 >、 >=、 ==、 !=。
像这样:
var e:Number = a * b / (c + d);
不要这样:
var e:Number = (a * b) / (c + d);
像这样:
var e:Boolean = a && b || c == d;
不要这样:
var e:Boolean = ((a && b) || (c == d));
对于一些复杂运算符,我们很难记住其优先权,这时候用小括号就比较合适了。
强制转换
不要用一个布尔变量与true或false比较,因为他已经代表了true或false。
像这样:
if (flag)
不要这样:
if (flag == true)
像这样:
var flag:Boolean = a && b;
不要这样:
var flag:Boolean = (a && b) != false;
对于Number、String、XML、 XMLList、 Array、 Object或者 *类型的变量,我们都可以将他们强制转换为布尔型变量,因为他们都被规定了一些等效于false的值,但是这些值非常难记。
类型
你能记住他们是false的情况么?
Number
0, NaN
String
null, “”
XML / XMLList
null, >
Array
null, []
Object
null, {}, 0, NaN, false, >
*
undefined, null, {}, 0, NaN, false, >
像这样:
if (s != null && s != “”)
不要这样:
if (s)
让Object的一个子类隐式强制转换成布尔型变量,因为很显然,只有null的情况下才等效于false,其他情况都是true。(注意,Object和其子类都不能存储undefined值。
像这样:
if (child)
不要这样:
if (child != null)
像这样:
if (!child)
不要这样:
if (child == null)
对于int和uint类型,很显然只有0等效于false,其他都为true。但是你要隐式的强制转换,将其与0比较一下是比较好的做法。
对于显示的转换,如果变量接收不到值,而你希望其返回null而不是抛出异常,就用as运算符。其他情况请直接转换。
像这样:
IUIComponent(child).document
不要这样:
(child as IUIComponent).document
比较运算
书写比较表达式尽量让读者感觉自然。
像这样:
if (n == 3) // “if n is 3″
不要这样:
if (3 == n) // “if 3 is n”
++和 –运算符
当运算符加在变量前面和后面都不影响表达时候,尽量用运算符在后的形式。只有在先运算再读取变量的情况下才使用运算符在前的形式。
像这样:
for (var i:int = 0; i < n; i++)
不要这样:
for (var i:int = 0; i < n; ++i)
三目运算法 operator
仅在最简单的if/else表达式使用三目运算符,特别是对null值的检查。
像这样:
return item ? item.label : null;
不要这样:
if (!item)
return null;
return item.label;
不要在复杂的判断逻辑中使用嵌套的三目运算符。
像这样:
if (a < b)
return -1;
else if (a > b)
return 1;
return 0;
不要这样:
return a < b ? -1 : (a > b ? 1 : 0);
new 运算符
在类名后面加(),因为这是调用该类的构造函数,所以即使他没有参数也要将()加上。
像这样:
var b:Button = new Button();
不要这样:
var b:Button = new Button;