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
- 附加部分