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