Haxe手册摘要 一. 类型

类型

不需要像C++或者AS3那样额外声明类型,编译器可以自己识别,如:

var myButton = new MySpecialButton(); // Haxe

Haxe类型系统中有七种类型:

  • Class instance: 类或接口对象
  • Enum instance: Haxe枚举值
  • Structure: 匿名的结构体,如一个带名字的域集合
  • Function: 函数,有几个参数和一个返回值
  • Dynamic:一个通用类型可以用于任何类型
  • Abstract:编译时的类型,用于代表运行时的一个不同类型
  • Monomorph: 未知类型,也许晚些时候会变成不同的类型

Compound Type: 复合类型,一种带有子类型的类型

基本类型

三种基本类型

  • Bool: ture false
  • Int: 0, 1, -1, 0xFF0000…
  • Float: 1.0, 0.0, 1e10…

数字类型

Float 和 Int, 整形可以隐式转换为浮点型,反之不可以

溢出

因性能原因,Haxe编译器不检查任何溢出。因此Java,C++这样的语言和JS,PHP这样的目标语言是不同的。但haxe.Int32和haxe.Int64类可用来保证正确的溢出处理。

数字操作符

算术运算:加加,减减,加减乘除,取模
比较运算:==, !=, <, <=, >, >=
位运算: 与&或|非~,异或^,左<<右>>移,无符号右移>>>
平等运算:用于枚举 MyEnum.A == MyEnum.A, a.equals(b)

布尔运算

与&&或||非!
复合运算中有短路效应

Void

意思是没有种类。如函数没有返回值的情况。

Nullaility

Haxe变量是否可以为空。
静态目标语言如C++, Java的基本类型都是不可以为空的,有默认值
动态目标语言如JS,PHP则可以
如果想让基本类型支持空值,这样写:

var b:Null<Int> = null;

可选参数和Nullability

// x is a native Int (not nullable)
function foo(x : Int = 0) {}
// y is Null<Int> (nullable)
function bar( ?y : Int) {}
// z is also Null<Int>
function opt( ?z : Int = -1) {}

注意Haxe中argument 和parameter 不同。前者用于函数,后者用于类型

类对象

例子:

class Point {
  var x : Int;
  var y : Int;
  public function new(x,y) {//constructor
    this.x = x;
    this.y = y;
  }
  public function toString() {//normal method
    return "Point("+x+","+y+")";
  }
}

构造函数

构造函数的调用例子:

var p = new Point(-1, 65);

继承

使用extends关键字来继承,例如:

class Point3 extends Point {
  var z : Int;
  public function new(x,y,z) {
    super(x,y);//call parent constructor
    this.z = z;
  }
}

注意:子类可以不定义构造函数,但如果定义了就必须调super(),而且不像其他语言(如java)super可以在构造函数的任意位置而不是第一行调用。

子类可以覆盖父类的函数, 但需要override关键字。

接口

使用关键字interface来定义,例:

interface Printable {
  public function toString():String;
}

使用implements关键字来表示实现:

class Point implements Printable { }

支持多重实现,但要多个implements 关键字:

class Point implements Printable
  implements Serializable

也支持变量定义(但貌似实现类里的相应变量不像java一样是static的。)

支持多重继承接口

interface Debuggable extends Printable extends Serializable

注:Haxe 2像java一样使用逗号分隔interface,但是从3.0开始不一样了。

枚举对象

例:

enum Color {
  Red;
  Green;
  Blue;
  Rgb(r:Int, g:Int, b:Int);
}

例子中大括号里面都是构造函数,其中Rgb是带参数的。

枚举构造函数

var a = Red;
var b = Green;
var c = Rgb(255, 255, 0);

EnumValue是一种特殊类型,用于表示所有的枚举类型

enum Color {
  Red;
  Green;
  Blue;
  Rgb(r:Int, g:Int, b:Int);
}

class Main {
  static public function main() {
    var ec:EnumValue = Red; // valid
    var en:Enum<Color> = Color; // valid
    // Error: Color should be Enum<Color>
    //var x:Enum<Color> = Red;
  }
}

匿名结构体

(有点像JSON格式)

class Main {
  static public function main() {
    var myStructure = { x: 12, name: "foo"};
  }
}

类型定义:

typedef Point = { x : Int, y : Int }

class Path {
    var start : Point;
    var target : Point;
    var current : Point;
}

也可以从其他结构体“继承”

typedef Point3 = { > Point, z : Int }

也可以用JSON格式来定义,可以使用字符串定义属性名,但必须符合Haxe变量命名规范。

var point = { "x" : 1, "y" : -5 };

性能影响

使用结构体时,如果目标语言是动态语言,对性能没有影响,如果是静态语言,动态寻找比静态成员变量访问要慢。

自从Haxe3.1.0起,结构体支持多继承。

函数类型

$type是一个特殊的标识符,用于输出编译时表达式的种类

可选参数

声明时加个问号。

  static function test(?i:Int, ?s:String) {
    return "i: " +i + ", s: " +s;
  }

默认参数值

声明时赋予一个常量作为默认值

static function test(?i = 12, s = "bar") {
    return "i: " +i + ", s: " +s;
  }

动态类型

Haxe有静态类型系统,但可以通过Dynamic类型来关闭。
动态类型应该尽量少用,大多数情况下都不需要。

抽象类型

这是一个编译时特性。//TODO 还没看明白
例子:

abstract AbstractInt(Int) {
  inline public function new(i:Int) {
    this = i;
  }
}

Monomorph(单语素?)

//TODO 也还没看明白

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下载内容为官方原装下载资源包 Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用,还是网页;不论是应用于服务器还是个人桌面,Haxe都 可以胜任。” Haxe分别为Windows、Mac OSX以及Linux安装程序进行打包,当然如果安装包出现问题或者洁癖者也可以进行手工安装。安装包及手动安装指南尽在下载页面。 Haxe能做什么? 使用Haxe开发的程序可以被编译成: JavaScript:你可以将Haxe程序编译成单一的.js文件,访问DOM APIs并拥有“自动完成”的支持,所有的依赖都在编译时都被搞定了。 Flash:Flash早就放弃移动平台,和桌面平台共存亡了。你可以将Haxe程序编译成一个.swf文件,支持从Flash Player 6到11的所有版本。 NekoVM:将Haxe程序编译成NekoVM字节码,用在服务器相关的程序(比如动态网页),同时也可以用在命令行或者桌面应用中。 PHP:你可以将Haxe程序编译成.php文件。 C++:你可以直接从Haxe源码生成C++的code。NME库使用这项特性在iOS和Android上直接运行Haxe的code。 C#和Java:使用 -java 和 -cs 来生成相应源码 为什么要用HaxeHaxe是一门很强力的语言,有很多引人注目的特性。目标是给开发者一套一体化的工具来创建网站或者应用,一门语言打天下。它可以实现: ECMA风格的客户端、服务器端以及桌面型程序。 风一般迅捷的编译速度。 类型检查带来好处多多。 给特定平台引入缺失的语言特性,例如为Flash开发引入InLining和generics特性、宏、为C++引入动态对象以及运行时类信息等等。 无视平台差异,在不同平台之间轻松切换。 统一的语法以及特性。 一次编写,处处“自动”编译。 解救跨平台开发的一次尝试 由于它可以自动编译生成多种类型的代码,所以无论是iOS、Android、Windows Phone平台之间的本地程序跨平台,还是直接生成HTML5应用,甚至是跨越移动平台和桌面平台,都是解决应用在“不同平台之间”移植所带来痛苦的、一个不错的尝试。 愿望如此美好,引无数英雄尽折腰。不过要彻底根治跨平台的痛苦,恐怕是一条无比漫长艰辛的旅程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值