Haxe 是一个静态类型语言。这就是说,当声明一个变量,编译器需要知道什么类型的数据会被分配给变量,所以它才能有效的处理它。
编程社区也有一些关于动态类型语言才是更好的解决方案的争论。
动态类型是指变量在任何时候可以包含任何类型数据,通常变量甚至不需要被声明,直到被查询之前它们才需要赋值。一旦一个变量保存一个值,数据可以在之后被推断为另外的类型,而不用使用转换(cast)。选择动态类型语言的开发者通常会说他们可以更快的制作原型和开发他们的应用,并常常发现类型限制的不足,相比于他们使用过的更低层语言。然而,这样的编程技术容易导致混乱的代码,大大增加造成错误代码和不稳定程序的可能,而且难以维护。同时,这样构建的应用往往运行缓慢,并且比静态类型语言消耗更多的内存,因为虚拟机要执行代码,需要在使用语言创建、转换和摧毁数据结构时有更多的工作要做。
无论如何,动态类型和静态类型语言的争论不会停止,因为每个人的感受不尽相同。但目前,最好还是承认,因为 Haxe 是静态类型的,它有最优的运行速度和文件大小,而且整洁的语法要求可以使你成为更好的程序员。
不用多说,静态类型需要对变量进行声明。Haxe 的变量需要在使用之前声明,然后一个恰当的结构和相应的内存分配被应用到你的数据。声明变量使用如下的语法:
~~~
var varName: Type;
~~~
关键字 `var` 和 VB 的 `Dim` 关键字很类似,告诉编译工具后面那一行是一个变量声明。没有 `var` 关键字,编译工具期待一个表达式跟在变量后,比如分配数据到变量的语句,当然这会引起一个编译工具的错误,如果变量还未被声明。
`var` 关键字后是变量名。可以取任何你喜欢的名字,只要包含字母、数字或者下划线。同时,必须注意的是,尽管一个变量名可以包含数字,但是不能以数字作为开头。
变量声明的最后一部分是类型。类型名必须以一个大写字符开始。分配一个类型,会告诉编译工具你希望存储到这个变量中的数据的类型,所以才能在之后的代码中进行检查,从而减少运行时可能发生的错误。
你可以在声明的时候用数据初始化一个变量,然而这不是强制性的。要初始化一个变量,只要在声明之后使用一个赋值操作符(`=`),然后后跟是初始化变量需要的值,像这样:
~~~
var varName: Type = “dataToAssign”;
~~~
使用到变量声明之后的数据可以是文本数据,如前面的例子。或者也可以使用现有的变量进行赋值。
试试如何声明一个变量。输入如下代码到一个新的文件,并保存它为 `VariableAssignment.hx` 文件:
~~~
class VariableAssignment {
public static function main() {
var flt:Float = 10.5;
var str:String = "The quick brown fox.";
trace(flt);
trace(str);
}
}
~~~
现在,编译代码,使用如下的 `.hxml` 内容:
~~~
-neko variableassignment.n
-main VariableAssignment
~~~
通过如下代码运行 neko 文件:
~~~
neko variableassignment.n
~~~
你应该会看到类下面的结果:
~~~
VariableAssignment.hx:5: 10.5
VariableAssignment.hx:6: 飞快的棕色狐狸。
~~~
当代码被编译时,编译工具会对比传递到变量的值和这些变量被指定的值。 `trace` 函数提供一个方式转换大多数数据类型为字符串表示的格式,然后它可以被输出到控制台。
有可能出现的问题是,你可能并不知道将被存储到变量中值的类型信息。如果你已经创建了一个程序,通过外部提供的数据进行响应,那么你希望存储到变量的信息在运行之前并不能确定。
这个问题的答案是 Haxe 使用了类型推断。
- 本书目录
- 第一章:Haxe介绍
- 互联网开发的一个问题
- Haxe是什么,为什么产生
- Haxe编译工具
- Haxe语言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必须条件
- 本章摘要
- 第二章:安装、使用Haxe和Neko
- 安装Haxe
- 使用Haxe安装程序
- 在Windows上手动安装Haxe
- Linux上手动安装Haxe
- 安装Neko
- Windows上手动安装Neko
- 在Linux上安装Neko
- Hello world! 一式三份
- 编译你的第一个Haxe应用
- 你的程序如何编译
- HXML编译文件
- 编译到Neko
- 编译为JavaScript
- 程序结构
- 编译工具开关
- 本章摘要
- 第三章:基础知识学习
- Haxe层级结构
- 标准数据类型
- 变量
- 类型推断
- 常数变量
- 简单的值类型
- 浮点类型
- 整型
- 选择数值类型
- 布尔类型
- 字符串类型
- 抽象类型
- Void 和 Null
- 动态类型
- unknown类型
- 使用untyped绕过静态类型
- 注释代码
- 转换数据类型
- Haxe数组
- Array
- List
- Map
- Haxe中使用日期时间
- 创建一个时间对象
- Date组件
- DateTools类
- 操作数据
- 操作符
- Math类
- 使用String函数
- 本章摘要
- 第四章:信息流控制
- 数据存放之外
- 条件语句
- if语句
- switch语句
- 从条件语句返回值
- 循环
- while循环
- for循环
- 循环集合
- Break和Continue
- 函数
- 类的函数
- 局部函数
- Lambda类
- 本章摘要
- 第五章:深入面向对象编程
- 类和对象
- 实例字段
- 静态字段
- 理解继承
- Super
- 函数重载
- 构造器重载
- toString()
- 抽象类和抽象方法
- 静态字段,实例变量和继承
- 继承规则
- 使用接口
- 高级类和对象特性
- 类的实现
- 类型参数
- 匿名对象
- 实现动态
- Typedef
- 扩展
- 枚举
- 构造器参数
- 本章摘要
- 第六章:组织你的代码
- 编写可重用代码
- 使用包
- 声明一个包
- 隐式导入
- 显式导入
- 枚举和包
- 类型查找顺序
- 导入一个完整的包
- 导入库
- Haxe标准库
- Haxelib库
- 其他项目中的库
- 外部库
- 使用资源
- 文档化代码
- 离线文档
- 在线文档
- 单元测试
- haxe.unit包
- 编写测试
- 本章摘要
- 第七章:错误调试
- trace函数
- trace输出
- haxe的trace和ActionScript的trace
- 异常
- 异常处理
- CallStack和ExceptionStack
- 异常管理类
- 创建完全的异常处理类
- 异常类代码
- 本章摘要
- 第八章:跨平台工具
- XML
- XML剖析
- Haxe XML API
- 正则表达式
- EReg类
- 模式
- 定时器
- 延迟动作
- 队列动作
- MD5
- 本章摘要
- 第九章:使用Haxe构建网站
- Web开发介绍
- Web 服务器
- 使用Web服务器发布内容
- HTML速成课程
- Haxe和HTML的区别
- NekoTools Web Server
- Apache安装mod_neko
- Windows安装Apache和mod_neko
- Linux安装Apache和Mod_Neko
- 第一个Haxe网站
- 使用Neko作为网页Controller
- neko.Web类
- Neko作为前端控制器
- 本章摘要
- 第十章:使用模板进行分离式设计
- 什么是模板
- Template类
- Template语法
- 使用资产
- 何时在模板中使用代码
- 服务器端模板的Templo
- 安装Templo
- 使用Templo
- haxe.Template和mtwin.Templo表达式上的区别
- Attr表达式
- Raw表达式
- 逻辑表达式
- 循环表达式
- set, fill, 和 use表达式
- Templo中使用宏
- 手动编译模版
- 第十一章:执行服务端技巧
- 第十二章:使用Flash构建交互内容
- 第十三章:使用IDE
- 第十四章:通过JavaScript制作更多交互内容
- 第十五章:通过Haxe远程通信连接所学
- 第十六章:Haxe高级话题
- 第十七章:Neko开发桌面应用
- 第十八章:用SWHX开发桌面Flash
- 第十九章:多媒体和Neko
- 第二十章:使用C/C++扩展Haxe
- 附加部分