阅读文章(首页/程序开发/.NET教程/)

ES4新特征介绍之一:关于类型声明(AS4的曙光)

[日期:2008-02-18] 来源:  作者: [字体: ]

    
    去年(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日
  
    


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:一次性替换数据库中所有表所有列的关键字
下一篇:ES4新特征介绍之二:泛型、反射与其它编程体验
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款