• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>Flex>文章内容
  • ES4新特征介绍之一:关于类型声明
  • 来源:sban 作者:sban 2008-03-08 【

  去年(2007)10月23日,ES4(SCMAScript4)标准出台了。我感到很遗憾,今天才得以了解ES4的新特征。它们是令人激动人心的。或许有人会说,AS3(ActionScript3)尚未学通,怎么AS4又要出了吗?AS4尚未出台。不过,AS语言是基于ECMAScript标准的,且比C#走得更前卫,所以,我想AS4出台是早晚的事。我预感到在08年下半年将可以见到AS4.技术更新太快了。近几日学习了一下ECMAScript4,给大家介绍一下。

  一,对象类型动态声明

  在AS3中,可以用{}声明对象,如var programmer : Object = {name : "sban", age : 26}。但是这种声明形如动态类,只是定义上方便一些。在ES4中,充许动态定义对象的类型:

type Programmer = {name : String, city : String, age : byte};

  type成了关键字,programmerType也没有类型声明,其本即是一个类型。可以如下实例化:

var sban = new Programmer("sban", "Beijing", 26)

  既然是动态类型声明,还可以再动态些,预先的类型声明定义也可以不要了,直接定义变量:

var sban = new {name : String, city : String, age : byte}("sban", "Beijing", 26)

  感觉是不是很爽!此外,在函数参数中,也可以连带类型声明:

function move(point : {x : Number, y : Number})
{
...
}


function otherFunc()
{
...
move({12, 34.33} : {x : Number, y : Number});
}

  此外参数若只传递{12, 34.33}也可,但定少了强类型支持,与AS3中用法无二。

这便是Record Type特征,它有什么优点:

  1. 易于创建,相对于类(Class)而言,我们并不需要首先的类文件定义
  2. 比于Class更加灵活,更加轻巧(LightWeight)。
  3. 可以有代码自动提示(此为推测,我想是应该有的

  二,数组类型显式声明

  值得一提的是,对于数组类型的声明。AS3中尚不支持数组类型,只能用metadata tag(ArrayElementType)声明。而在ES4中,已经成为理所当然。定义一个double类型的数组如下:   简单吧,没办法。如果说As3奠定了其在面向对象编程界的地位,那么,我们期待的AS4将会更加激动人心。拭目以待吧。

type arrType = [double]

 

 

type arrType = [int,uint,decimal,byte]

 

  这个数组的元素依次是int,uint,decimal,byte类型。其单独使用不见威力,在类型复合定义中,却用途非凡了,如下:

  三,类型复合声明

  数组类型声明还可以有多种内建类型,如:

type Student = [ [string,int,string...] ]

   这是一个复合数组声明,它可以用于存储学生信息,每一个元素是一个数组,包括学生的姓名,年龄,年级,成绩等信息。这在AS3中是不可能的。

type Programmer = {name : {first : string, last : string}, age : uint, city : string}

  这是一个对象类型复合声明,若用class定义,则至少需要二个类。前文其轻巧易于Create的特征可见于此。

type Programmer = {name : {first : string, last : string}, compories : [ [string, uint] ]}

   这个声明则更加复合,添加了复合数组声明。与上一个原理是一样的。

  四,关于联合类型,一个参数不再只可以有一个类型

  你是不是觉得一个参数只有一个定义是天经地义的。在开发flex5之前,我也是这么认为的,直到我需要一个参数既可能是类型A又可能是类型B时。如今在ES4中已为可能。以下定义在ES4中是合法的:

function funcName (arg : ( string | XML )) {...}

  参数arg既可能是string亦可是XML类型。

  type oneType = (decimal , Number)意味着oneType既可是decimal,亦可是Number类型。

  截止目前,本文中既出现了string,也出现了String,以及number与Number,其它类似。在ES4中,Number,Boolean,String是其同名小写的wapper,具有dynamic,nullable,non-final特征。

  五,强类型支持无处不在,rest也可以有类型了

  我一直坚信强类型支持是未来面向对象语言必有特征。在ES4中,原来类型不定的rest也可以指定类型了。例:

function funcName (name : sring , ...[String])
function funcName (name : sring , ...[Programmer])

  是Build-ins类型,还是custom类型随意。

  六,添加了多种数字类型

  在aS3中,数据类型止有int,uint,Number三种。你是不是不能满足需要?ES4添加对double(64位), decimal(128位),byte的支持。其中double相当于AS3中的Number。

  另外,如前所述,Boolean等是对boolean等的封装。ES4预定义了AnyBoolean类型,详细如下:

type AnyString = (string,String)  
type AnyBoolean = (boolean,Boolean)  
type AnyNumber = (byte,int,uint,double,decimal,Number)  
type FloatNumber = (double,decimal)

  一要走开噢。在之二中将给大家介绍ES4旨在提高程序员编程体验的一些同样令人激动无比的新特征。请关注http://sban.com.cn/

sban 于北京朝阳园 2008年2月17日





上一篇:flex3学习系列之三:Use Event   下一篇:用Validator检测数字、字符串、Email、电话号码等
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
FLASH源文件

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)