跳轉到內容

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!

Goto 和 Gosub

[編輯 | 編輯原始碼]

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

[編輯 | 編輯原始碼]

Data、Read 和 Restore 受支援,但已重新命名為 DefDataReadDataRestoreData。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”。

華夏公益教科書