文章目录
- 第二十章 ObjectScript - 潜在的缺陷
第二十章 ObjectScript - 潜在的缺陷
以下项目可能会让刚接触ObjectScript
的程序员感到困惑,特别是那些负责维护其他程序员编写的代码的程序员:
- 在例程或方法中,除非每行包含标签,否则每行必须至少缩进一个空格或一个制表符。也就是说,如果在第一个字符位置有任何类型的文本,编译器和
IDE
将其视为标签。
有一个例外:在第一个字符位置接受花括号。
命令和它的第一个参数之间必须有一个空格(不是制表符)。否则,你的IDE
指示你有一个语法错误:
类似地,终端显示语法错误如下:
TESTNAMESPACE>write 5
WRITE 5
^
<SYNTAX>
TESTNAMESPACE>
ObjectScript
中的运算符优先级严格从左到右;在表达式中,操作按照它们出现的顺序执行。可以在表达式中使用显式括号强制将某些操作置于其他操作之前。
通常,即使在不严格需要括号的地方也会使用括号。这样做对其他程序员(以后对你自己也是)很有用,因为它使你的代码的意图更清晰。
- 由于历史原因,
ObjectScript
不认为空字符串(""
)等于ASCII NULL
值。要表示ASCII
NULL
值,请使用$CHAR(0)
。($CHAR
是一个系统函数,它返回一个基于十进制的ASCII
字符。) 例如:
write "" = $char(0)
类似地,当ObjectScript
值被映射为SQL
或XML
时,值""
和$CHAR(0)
被区别对待。
ObjectScript
的某些部分区分大小写,而其他部分则不区分大小写。不区分大小写的条目包括命令名、函数名、特殊变量名、命名空间名和用户名。
区分大小写的项包括定义的大多数元素的名称:例程、变量、类、属性和方法。
- 大多数命令名都可以用缩写形式表示。因此,
WRITE
、write
、Write
、W
和W
都是WRITE
命令的有效形式。 - 对于许多命令,可以包含后置条件表达式(通常简称为后置条件)。
该表达式控制 IRIS
是否执行该命令。如果后置条件表达式的计算结果为true
(非零), IRIS
将执行该命令。如果表达式的计算结果为false
(零),IRIS
将忽略该命令并继续执行下一个命令。
Set count = 6
Write:count<5 "Print this if count is less than five"
Write:count>5 "Print this if count is greater than five"
前面的内容生成以下输出: 如果计数大于 5
,则打印此内容
注意:如果后置条件对说是新的,可能会发现短语“后置条件表达式”有些误导,因为它(错误地)表明表达式在命令之后执行。尽管有这个名称,但后置条件是在命令之前执行的。
- 可以在一行中包含多个命令。例如:
set myval="hello world" write myval
执行此操作时,请注意,如果该行上还有其他命令,则必须在任何不带参数的命令后面使用两个空格;如果不这样做,就会出现语法错误。
-
IF
、ELSE
、FOR
和DO
命令有两种形式:- 一种较新的块形式,它使用花括号来指示块。例如:
if (testvalue=1) { write "hello world" }
ISC
建议在所有新代码中使用块形式。- 一种较旧的基于行的形式,不使用花括号。例如:
if (testvalue=1) write "hello world"
-
由于前面的内容,
ObjectScript
可以以非常紧凑的形式编写。例如:
s:$g(%d(3))'="" %d(3)=$$fdN3(%d(3)) q
类编译器自动生成上面所示形式的紧凑代码(尽管不一定像本示例中那样使用缩写命令)。有时,查看生成的代码、追踪问题的根源或了解某些内容的工作原理很有用。
ObjectScript
中没有真正的保留字,因此理论上可以有一个名为set
的变量。然而,谨慎的做法是避免使用命令、函数、SQL
保留字和某些系统项的名称;IRIS
分配固定数量的内存来保存字符串操作的结果。如果字符串表达式超出分配的空间量,则会产生<MAXSTRING>
错误。
对于类定义,字符串操作限制会影响字符串属性的大小。 IRIS
提供了一个系统对象(称为流),当需要处理超出此限制的字符串时,可以使用它;在这种情况下,可以使用流接口类。