跳转到内容

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”。

华夏公益教科书