第五章 ObjectScript
方法和例程都可以用 ObjectScript
编写,但大多数现代代码都是使用方法编写的。方法包含在类中,这允许将类似的方法分组在一起,在类参考中自动生成文档,以及使用 IRIS
的面向对象功能。
这并不意味着routines
不重要。许多有用的系统实用程序都是作为例程编写的,并且在编译类时会生成例程。
示例类
下面显示了一个名为 User.DemoClass
的示例类,其中包含用 ObjectScript
编写的方法。此示例使我们有机会了解一些常见的 ObjectScript
命令、运算符和函数,并了解代码在方法内的组织方式。
Class User.DemoClass
{
/// Generate a random number.
/// This method can be called from outside the class.
ClassMethod Random() [ Language = objectscript ]
{
set rand=$RANDOM(10)+1 ; rand is an integer in the range 1-10
write "Your random number: "_rand
set name=..GetNumberName(rand)
write !, "Name of this number: "_name
}
/// Input a number.
/// This method can be called from outside the class.
ClassMethod Input() [ Language = objectscript ]
{
read "Enter a number from 1 to 10: ", input
set name=..GetNumberName(input)
write !, "Name of this number: "_name
}
/// Given an number, return the name.
/// This method can be called only from within this class.
ClassMethod GetNumberName(number As %Integer) As %Integer [ Language = objectscript, Private ]
{
set name=$CASE(number,1:"one",2:"two",3:"three",
4:"four",5:"five",6:"six",7:"seven",8:"eight",
9:"nine",10:"ten",:"other")
quit name
}
/// Write some interesting values.
/// This method can be called from outside the class.
ClassMethod Interesting() [ Language = objectscript ]
{
write "Today's date: "_$ZDATE($HOROLOG,3)
write !,"Your installed version: "_$ZVERSION
write !,"Your username: "_$USERNAME
write !,"Your security roles: "_$ROLES
}
}
请注意以下要点:
-
Random()
和Input()
方法调用GetNumberName()
方法,该方法是此类的私有方法,不能从类外部调用。 -
WRITE
、QUIT
、SET
和READ
是命令。该语言还包括用于删除变量的其他命令、用于控制程序流的命令、用于控制I/O
设备的命令、用于管理事务(可能是嵌套的)的命令等等。
命令名称不区分大小写,尽管按照惯例它们在运行文本中显示为全大写。
- 该示例包括两个运算符。加号(
+
)执行加法,下划线(_
)执行字符串连接。
ObjectScript
提供了常用的运算符和一些其他语言中未见的特殊运算符。
-
$RANDOM
、$CASE
和$ZDATE
是函数。
该语言提供了字符串操作、多种转换、格式化操作、数学操作等的函数。
-
$HOROLOG
、$ZVERSION
、$USERNAME
和$ROLES
是系统变量(在IRIS
中称为特殊变量)。大多数特殊变量包含IRIS
操作环境、当前处理状态等方面的值。 -
ObjectScript
支持注释行、块注释和语句末尾的注释。
我们可以在终端中执行该类的方法,作为演示。在这些示例中,<TESTNAMESPACE>
是终端中显示的提示符。同一行提示符后面的文本是输入的命令。之后的行显示系统作为响应写入终端的值。
TESTNAMESPACE>do ##class(User.DemoClass).Input()
Enter a number from 1 to 10: 7
Name of this number: seven
TESTNAMESPACE>do ##class(User.DemoClass).Interesting()
Today's date: 2021-07-15
Your installed version: IRIS for Windows (x86-64) 2019.3 (Build 310U) Mon Oct 21 2019 13:48:58 EDT
Your username: SuperUser
Your security roles: %All
TESTNAMESPACE>
网友评论