AS3 和 Haxe 语法对比
2014年03月29日 17:50GMT+8
本文档的目的是帮助 熟悉 Actionscript 3 的开发人员快速入门 Haxe。更多 Haxe 特定文档请参阅主要的 Haxe.org.
这个文档源文来自: Haxeflixel’s guide.
Basic Types(基础类型)
AS3
Boolean
int
Number
Object
void
Array
Vector.<String>Haxe
Bool
Int
Float
Dynamic
Void
Array<Dynamic>
Array<String>Const (常量)
AS3
const MAX:int = 100;Haxe
static inline var MAX:Int = 100;
// haxe 的常量只允许为 Int, Bool, Float, StringPackage Declarations(包声明)
AS3
package com.example.myapplication {
}Haxe
package com.example.myapplication;Defining a Class(定义类)
AS3
public class MyClass {
public function MyClass () {
}
}Haxe
class MyClass {
public function new () {
}
}Loops(循环)
AS3
for (var i:uint = 0; i < 100; i++) {
}
for(var value:String in items) {
}
for (var propertyName:String in object) {
}Haxe
// haxe 没有 for(var i=0; i<10; i++)
for (i in 0...100) {
}
for (value in items) {
}
var fields = Reflect.fields (object);
for (propertyName in fields) {
}Switch Statements
AS3
switch (value) {
case 1:
trace ("Equal to 1");
break;
default:
trace ("Not equal to 1");
break;
}Haxe
// haxe 中的 switch 不需要 break;
switch (value) {
case 1:
trace ("Equal to 1");
default:
trace ("Not equal to 1");
}
Type Inference(类型推断)
AS3
var hi = "Hello World";
// 类型为 Object,不能通过严格模式的编译Haxe
var hi = "Hello World";
// 类型为 String,能正常通过编译Type Casting(类型转换)
AS3
var car:Car = vehicle as Car;
var toString:String = String (10);
var toNumber:Number = Number ("10");
var toInteger:int = int (10.1);Haxe
var car:Car = cast vehicle;
// or for a safe cast:
var car = cast (vehicle, Car);
var toString = Std.string (10);
var toNumber = Std.parseFloat ("10");
var toInteger = Std.int (10.1);Type Details
AS3
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
if (vehicle is Car) {
}
name = getQualifiedClassName (vehicle);
type = Class (getDefinitionByName (name);Haxe
// haxe 中没有 is,as 以及 instanceof 这些关键字
if (Std.is (vehicle, Car)) {
}
type = Type.getClass (vehicle);
name = Type.getClassName (type);Checking for Null
AS3
if (object == null) {
}
if (!object) {
}Haxe
if (object == null) {
}Hash Tables
AS3
var table:Object = new Object ();
table["key"] = 100;
trace (table.hasOwnProperty ("key"));
for (var key:Object in table) {
trace (key + " = " + table[key]);
}
delete table["key"];Haxe
var table = new Map<String, Int> ();
table.set ("key", 100);
trace (table.exists ("key"));
for (key in table.keys ()) {
trace (key + " = " + table.get (key));
}
table.remove ("key");Rest Parameters(可变参数)
AS3
function test (...params):void {
}
test (1, 2, 3);Haxe
function test (params:Array<Dynamic>) {
}
Reflect.makeVarArgs (test) (1, 2, 3);Reflection(反射)
AS3
var foo = object["foo"];
bar.apply (this, [ "hi" ]);Haxe
var foo = Reflect.field (object, "foo");
Reflect.callMethod (this, bar, [ "hi" ]);Function Types(函数类型)
AS3
function hello (msg:String):void {
}
var type:Function = hello;Haxe
function hello (msg:String):Void {
}
var type:String->Void = hello;
// can also use Dynamic
var type2:Dynamic = hello;Getters and Setters
AS3
function get x ():Number {
return _x;
}
function set x (value:Number):void {
_x = value;
}Haxe
var _x:Float;
public var x (get, set):Float;
function get_x():Float { return _x; }
function set_x(value:Float):Float {
return _x = value;
} // 实际上不需要写得这么晦涩难懂Read-Only Properties(只读属性)
AS3
function get x ():Number {
return _x;
}Haxe
public var x (default, null):Float;
// setter 的值可以为: null, never 或 set
// null 表示仅能在类的内部修改其它
// never 表示不可修改延时
AS3
var cancelID:uint = setTimeout(callb, 1000);
clearTimeout(cancelID);// 取消Haxe
var t = haxe.Timer.delay(callb, 1000);
t.stop(); // 取消类实例对比
AS3
// AS 中对比二个实例是否为一个很简单
trace(this == root);
//或使用全等号
trace(this === root);Haxe
// Haxe 则需要类型一致, 或者互为父,子类
trace(this == cast(root,Sprite)); //
//或使用 cast
trace(this == cast root);条件编译
AS3
// 需要 IDE 支持
CONFIG::DEBUG{
trace("debug");
}Haxe
#if debug
trace("debug");
#end更多特性
Haxe 增加了一些 Actionscript 3 没有的语法特性: