|
| 首页 → 程序开发 → .NET教程 |
| 阅读文章(首页/程序开发/.NET教程/) |
ES4新特征介绍之一:关于类型声明(AS4的曙光)
去年(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特征,它有什么优点: 易于创建,相对于类(Class)而言,我们并不需要首先的类文件定义 比于Class更加灵活,更加轻巧(LightWeight)。 可以有代码自动提示(此为推测,我想是应该有的) 二,数组类型显式声明 值得一提的是,对于数组类型的声明。AS3中尚不支持数组类型,只能用metadata tag(ArrayElementType)声明。而在ES4中,已经成为理所当然。定义一个double类型的数组如下: type arrType = [double] 简单吧,没办法。如果说As3奠定了其在面向对象编程界的地位,那么,我们期待的AS4将会更加激动人心。拭目以待吧。 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旨在提高程序员编程体验的一些同样令人激动无比的新特征。 sban 于北京朝阳园 2008年2月17日
|
| 相关文章 |
| 发表评论 |
BK网络学院主要内容:平面设计教程,网站开发在线教程,网页制作教程,服务器教程,网络编程,数据库教程等。产业部:沪ICP备05019380号 陇ICP备05004709号 公安局:GR6201030003 Copyright © BK设计 Powered by BK网络学院 |