BlitzMax/語言/BASIC 相容性
本節介紹了 BlitzMax 和“經典”BASIC 之間的一些區別,並介紹了有助於克服經典 BASIC 缺點的功能。
經典 BASIC 允許你“動態”宣告變數。例如,考慮一個包含以下程式碼的程式
For k=1 To 10 sum=sum+k Next Print sum
該程式會自動建立 2 個區域性變數:“k”和“sum”。但是,這種行為往往會導致意想不到的錯誤。例如,如果你誤拼了其中一個“sum”變數,程式將無法按預期工作。不會出現錯誤 - 只會簡單地建立一個新的變數。
預設情況下,BlitzMax 允許你像這樣自動宣告變數。但是,可以使用 **Strict** 命令覆蓋此行為。
Strict 必須出現在程式頂部的任何實際程式程式碼之前,並會將你的程式置於“嚴格模式”。嚴格模式強制你在使用前宣告所有變數。例如,在嚴格模式下重寫上面的程式將得到以下結果
Strict Local sum,k For k=1 To 10 sum=sum+k Next Print sum
如果你在該程式中誤拼了其中一個變數名,編譯時將收到“未找到識別符號”錯誤,這將使你能夠輕鬆地找到並糾正問題。
Blitzmax 不支援用於建立陣列的 Dim 語句。相反,BlitzMax 中的陣列是真正的型別 - 它們可以傳遞給函式、從函式返回以及放在變數中。
要建立 BlitzMax 中的經典 BASIC 風格陣列,請使用全域性變數。例如
Global my_array$[100] 'create a 100 element string array
另請注意,BlitzMax 中的陣列並不比其定義的尺寸“大 1” - 上面的 100 元素陣列包含 100 個元素,編號從 0 到 99(含)。
BlitzMax 也不支援“Redim”操作。相反,你可以使用 切片。例如
Global my_array$[100] 'create a 100 element string array my_array=my_array[..200] 'now a 200 element array!
BlitzMax 不支援 Gosub 命令。請改用 函式。
Goto 命令受支援,但僅在非嚴格模式下。Goto 標籤應以 # 字元為字首。例如
For k=1 To 10 a=Rand(10) If a<5 Then Goto LessThan5 If a>5 Then Goto GreaterThan5 Print "a is equal to 5" Goto AllDone #LessThan5 Print "a is less than 5" Goto AllDone #GreaterThan5 Print "a is greater than 5" #AllDone Next
Data、Read 和 Restore 受支援,但已重新命名為 DefData、ReadData 和 RestoreData。Data 標籤也必須以 # 字元為字首。
BlitzMax 允許將物件分配給整型變數,以及將整型變數傳遞給期望物件的函式。這主要為了初學者的利益,因為它減小了程式碼的大小和複雜性,但也非常適合懶惰的專業人士!例如
Graphics 640,480 image=LoadImage( "an_image.png" ) 'returned object is converted to an integer handle DrawImage image,0,0 'integer image parameter is converted back to an object Flip WaitKey
這是透過使用 *物件控制代碼* 系統實現的,並且當不再需要這些控制代碼時,應使用 Release 命令釋放它們。例如
Graphics 640,480 image=LoadImage( "an_image.png" ) 'returned object is converted to an integer handle DrawImage image,0,0 'integer image parameter is converted back to an object Release image 'image no longer needed - release it Flip WaitKey
未能釋放物件控制代碼會導致記憶體洩漏。但是,所有物件都在程式退出時自動釋放,因此對於快速而髒的工作,你無需費心。
在宣告變數和函式返回型別時,BlitzMax 允許你使用 BASIC 風格的“型別標籤”。它們如下所示
| 型別標籤 | 等效型別 |
| % | Int |
| # | Float |
| ~! | Double |
| ~$ | String |
例如,字串變數可以用兩種方法宣告
Local a_string:String Local another_string$
鍵盤上沒有 # 字元的 Mac 使用者應使用“Alt 3”。