第二十章 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值被映射为SQLXML时,值""$CHAR(0)被区别对待。

  • ObjectScript的某些部分区分大小写,而其他部分则不区分大小写。不区分大小写的条目包括命令名、函数名、特殊变量名、命名空间名和用户名。

区分大小写的项包括定义的大多数元素的名称:例程、变量、类、属性和方法。

  • 大多数命令名都可以用缩写形式表示。因此,WRITEwriteWriteWW都是WRITE命令的有效形式。
  • 对于许多命令,可以包含后置条件表达式(通常简称为后置条件)。

该表达式控制 IRIS是否执行该命令。如果后置条件表达式的计算结果为true(非零), IRIS将执行该命令。如果表达式的计算结果为false(零),IRIS将忽略该命令并继续执行下一个命令。

扫描二维码关注公众号,回复: 16514342 查看本文章
 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

执行此操作时,请注意,如果该行上还有其他命令,则必须在任何不带参数的命令后面使用两个空格;如果不这样做,就会出现语法错误。

  • IFELSEFORDO 命令有两种形式:

    • 一种较新的块形式,它使用花括号来指示块。例如:
     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 提供了一个系统对象(称为流),当需要处理超出此限制的字符串时,可以使用它;在这种情况下,可以使用流接口类。

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/132729260