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

ES4新特征介绍之二:泛型、反射与其它编程体验

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

    
    去年(2007)10月23日,ES4(SCMAScript4)标准出台了。我感到很遗憾,今天才得以了解ES4的新特征。它们是令人激动人心的。或许有人会说,AS3(ActionScript3)尚未学通,怎么AS4又要出了吗?AS4尚未出台。不过,AS语言是基于ECMAScript标准的,且比C#走得更前卫,所以,我想AS4出台是早晚的事。我预感到在08年下半年将可以见到AS4.技术更新太快了。近几日学习了一下ECMAScript4,给大家介绍一下。
  
  ES4新特征介绍之一:关于类型声明
  
    七,泛型
  
    使用AS3的时候,你是否想过如果支持泛型与反射就更好了。的确这两种特征在面向对象编程中起着非同小可的作用。
  
  class Hashtable.<K,V>{
   var store : [ [K,V] ];
   function fetch(k:K) : V
   ...{
   var ix : uint = hash_func(k); //用一个函数取得其索引
   while (store[ix][0] != k) ix = store[ix][1];
   }
  }
  
  //这个哈希结构很常见了,以数字作索引,指向字符串
  Hashtable.<uint,string> = new Hashtable.<uint,string>();
  
     如上这段代码便是ES4中的[类型化的参数],类似于C#中的泛型。其中用了数组类型声明,在之一中已经介绍。
  
    八,反射
   此块暂缺,稍后更新。
  
  
     九,若干编程小方便
  
    9.1 在AS3中someStr.slice(1,3)在ES4中可以用someStr[1,3],是不是更方便
  
    9.2 字符串支持了索引访问,"sban"[1]等于b
  
    9.3 可以包含没有escaped的字符,以下这句是合法的:
  
  """this string starts here it has a "blank" line before this one and ends here:"""
     9.4 如C#一般,数字类型支持了格式,以下数字具有了单位意义:
  
  -7i, 1u, 37d, 14.5m
   其中,i = int, u = uint, d = double, m = decimal
  
    9.5 函数可以返回两个值
  
  function getInfo():Array return ["sban", "BeiJing"];
  
  ...
  var name,city;
  [name, city] = getInfo();
  trace(name);
  trace(city);
    trace的结果是什么,"sban" 和 "Beijing"。Why? ES4不仅一个函数可以同时返回两个值,并且还可以同时给两个变量赋值。
  
    9.6 单行函数
  
    在9.5中,getInfo可能让人觉得有误,因为它没有{}。而这是充许的,函数充许在一行中定义而不使用它。
  
    9.7 数组可以由表达式定义
  
    这有点像lambda了。语法为:[expression for condition]。for之前为表达式,之后为条件。
  
  function range(begin, end) for (let i = begin; i < end; ++i) { yield i; }
  
  var tenArray = [i*10+1 for (i in range(1, 10))];
    9.8 var 的局部定义替代者let
  
    在9.7中出现了奇怪的let,它是干什么的?
  
    let用于变量的局部定义,它有点类似于c++的inline。
  
  {
   let a = 10, b=20
   ...{
   let a = 20
   trace(a+b) // 40
   }
   trace(a) // 10
  }
    9.9  like运算符
  
    用于比较两个对象的类型定义是否雷同或返回相似的类型声明。
  
  var p : like {x : int, y : int};
  
  if (p is like {x : int, y : int})...
  
    9.10 &&= 与 | |=
  
    var1 = var1 || "default value"; 可以用var1 ||= "default value";
  
    9.11 可以重写运算符操作用户自定义类型(不可用于系统类型)
  
  generic intrinsic function + ( list: UserList, user: User )
  ...{
   list.push(user); return user;
  }
  
  // Usage: userList + user;
    9.12 cast 用于类型转换
  
    9.13 this关键字在当前函数中有效,可不再使用arguments.callee。
  
  sban 于北京朝阳园 2008年2月17日
  
    


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:ES4新特征介绍之一:关于类型声明(AS4的曙光)
下一篇:WPF Designer的智能提示在安装最新Windows SDK或者MSDN后不工作的解决
相关文章      
本文评论
发表评论


点评: 字数
姓名:

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