第一章 ObjectScript 脚本简介
简介
ObjectScript 是一种对象编程语言,专为在 InterSystems IRIS® 上快速开发复杂的业务应用程序而设计.
作用
ObjectScript 源代码被编译为在 InterSystems IRIS 虚拟机内执行的目标代码。该目标代码针对业务应用程序中常见的操作进行了高度优化,包括字符串操作和数据库访问。
常用的地方
- 从终端的命令行交互。
- 作为 InterSystems IRIS 类方法的实现语言。 (请注意,类定义并不是 ObjectScript 的正式组成部分。相反,您可以在类定义的特定部分中使用 ObjectScript)。
- 创建 ObjectScript 例程:InterSystems IRIS 中包含并执行的单个程序。
- 作为 InterSystems SQL 中存储过程和触发器的实现语言。
这里作为SQL这点需要继续了解一下。
Features 特性
- 用于处理字符串的强大内置函数。
- 对对象的原生支持,包括方法、属性和多态性。
- 用于指导应用程序内的控制流的各种命令。
- 一组用于处理 I/O 设备的命令。
- 支持多维、稀疏数组:本地和全局(持久)。
- 支持高效的嵌入式 SQL 。(这一点需要去看看支持什么样的SQL标准【92】还是【99】的)
- 支持间接以及命令的运行时评估和执行。
ObjectScript区别于其他语言的注意点
- ObjectScript 不定义任何保留字:您可以自由使用任何字作为标识符(例如变量名)。
- 为了实现这一点,ObjectScript 使用一组内置命令以及特殊字符(例如函数名称的“$”前缀)来区分标识符和其他语言元素。
- 在 ObjectScript 中,可以(尽管不推荐)使用任何有效名称作为标识符名称,如以下程序所示,该程序在功能上与前面的示例相同:
例如,要给变量赋值,可以使用 SET 命令:
SET x = 100
WRITE x
// 下面的写法也是合法的 它的通过$符号来区分方法和变量的名称
SET SET = 100
WRITE SET
// 上面的语法中SET即是指令,第二个SET是本次设置的变量的地址名称(可以这样理解) 命令后面的格式是直接空格,变量是被使用或者赋值。
- ObjectScript 的某些组件(例如命令名称和函数名称)不区分大小写。 ObjectScript 的其他组件(例如变量名称、标签、类名称和方法名称)区分大小写。有关详细信息,请参阅区分大小写。
关于这一点的理解,命令和函数可以和MySQL作类比,变量名称是用户自己定义的称号,类名和方法名称都是用户自定义的东西,需要明确的区分大小写等。
- 您几乎可以在 ObjectScript 中的任何位置插入或省略空格。然而,空格的两个用途很重要:
- 命令及其参数必须至少用一个空格分隔。
- 每个命令行必须至少缩进一个空格。命令无法在行的第一个字符位置开始或继续。
- 注释也必须缩进。但是,标签必须从一行的第一个字符位置开始。某些其他语法(例如宏预处理器语句)可以从行的第一个字符位置开始。有关详细信息,请参阅空白。
- ObjectScript 不使用命令终止符或行终止符。
关于这一点可以对比js的语法,可以使用";",或者不使用";".
调用命令和函数
- 最简单形式的 ObjectScript 语法涉及对表达式调用命令,例如:
WRITE x
- 它对变量 x 调用 WRITE 命令(这将显示 x 的值)。在上面的例子中,x是一个表达式; ObjectScript 表达式是一个或多个可被计算以产生值的“标记”。
- 每个标记可以是文字、变量、一个或多个运算符的操作结果(例如两个数字相加的总和)、计算函数的返回值、这些的某种组合等等。语句的有效语法涉及其命令、函数、表达式和运算符。
语句和命令
ObjectScript 程序由许多语句组成。每个语句都定义了程序要执行的特定操作。每个语句都由一个命令及其参数组成。
eg:
SET x="World"
WRITE "Hello",!,x
WRITE 是一个命令。它的作用正如其名称所暗示的那样:它将您指定为参数的任何内容写入当前的主要输出设备。在本例中,WRITE 写入三个参数:文字字符串“Hello”;这 ”!”字符,它是特定于发出换行/回车的 WRITE 命令的符号运算符;以及局部变量 x,在执行期间被其当前值替换。参数之间用逗号分隔;您还可以在参数之间添加空格(有一些限制)。本文档的语法一章讨论了空格。
大多数 ObjectScript 命令(以及许多函数和特殊变量)都有长形式和短(缩写)形式(通常为一或两个字符)。例如,以下程序与前一个程序相同,但使用缩写的命令名称:
S x="World"
W "Hello",!,x
其中 S和W 使用简写的方式,类似于c和c++等语言的命令重载,可以自己定义语法的命令。
函数
函数是执行操作(例如,将字符串转换为其等效的 ASCII 代码值)并返回值的代码。在命令行中调用函数。
- 可以理解为,数据逻辑处理的部分。
此调用向函数提供参数值,函数使用这些参数值来执行某些操作。然后该函数将单个值(结果)返回给调用命令。您可以在任何可以使用表达式的地方使用函数。
- 返回单个值,可以理解为返回单个内存地址,或者单个地址集合所指向的地址。入参可以是多个。返回给函数的调用者。
InterSystems IRIS 提供了大量系统提供的函数(有时称为“固有”函数),您无法修改这些函数。
这些函数是可识别的,因为它们始终以单个美元符号(“$”)开头,并将其参数括在括号内;即使没有指定参数,括号也是必需的。
- 特殊变量名称也以单个美元符号开头,但没有括号。
许多系统提供的函数名称都有缩写。在本手册的正文中,使用完整的函数名称。缩写显示在函数的参考页面上,完整列表在 ObjectScript 中使用的缩写中提供。
函数总是返回一个值。通常,此返回值提供给命令,例如 SET namelen=$LENGTH("Fred Flintstone") 或 WRITE $LENGTH("Fred Flintstone"),或另一个函数,例如 WRITE $LENGTH($PIECE("打火石弗雷德","",1))。未能提供返回值的接收者通常会导致 SYNTAX 错误。但是,在一些函数中,不需要提供返回值的接收者。
通过执行函数(例如移动指针)或设置函数参数之一而执行的操作是相关操作。在这些情况下,您可以使用 DO 或 JOB 命令调用函数而不接收其返回值。例如,DO $CLASSMETHOD(clname,clmethodname,singlearg)。
- 这一点是可以这么理解,移动指针是表示变量指向的地址出现了改变,而这个变量在obscript中是属于全局的概念,不用再次去接收这个值。
函数可以没有参数、单个参数或多个参数。函数参数是位置参数并用逗号分隔。许多参数是可选的。如果省略某个参数,InterSystems IRIS 将使用该参数的默认值。
- 这个设计和python语法是一致的。
由于参数是位置参数,因此通常不能省略指定参数列表中的参数。在某些情况下(例如 $LISTTOSTRING ),您可以省略参数列表中的参数并提供占位符逗号。您不必为最后指定参数右侧的可选参数提供占位符逗号。
对于大多数函数,您无法指定同一参数的多个实例。 $CASE 、 $CHAR 和 $SELECT 除外。
通常,参数可以指定为文字、变量或另一个函数的返回值。在某些情况下,必须以文字形式提供参数。
在大多数情况下,必须先定义变量,然后才能将其指定为函数参数,否则会生成UNDEFINED错误。在少数情况下(例如 $DATA )参数变量不必定义。
通常,函数参数是向函数提供值的输入参数。函数不会修改作为输入参数提供的变量的值。在少数情况下,函数既返回值又设置输出参数。例如 $LISTDATA 返回一个布尔值,表示指定位置是否存在列表元素;它还(可选)将其第三个参数设置为该列表元素的值。
所有函数都可以在 SET 命令的右侧指定(例如,SET x=$LENGTH(y))。还可以在 SET 命令的左侧指定一些函数(例如 SET $LIST(list,position,end)=x)。可以在 SET 左侧指定的函数在其参考页语法块中进行标识。
系统提供的功能作为 InterSystems IRIS 的一部分提供。 《ObjectScript 语言参考》描述了系统提供的每个函数。类中提供的函数称为方法。 InterSystems IRIS 中提供的方法在 InterSystems 类参考中进行了描述。
除了系统提供的函数之外,ObjectScript 还支持用户定义的函数(有时称为“外部”函数)。有关定义和调用用户定义函数的信息,请参阅用户定义代码。
表达式
- 表达式,如果熟悉rust语法就知道是一个很重要的概念,表达式和语句需要区分开,表达式是一个有返回的“特殊函数”.
表达式是可以计算以产生单个值的任何标记集。例如,文字字符串“hello”是一个表达式。 l + 2 也是如此。x 等变量、 $LENGTH() 等函数以及 $ZVERSION 等特殊变量也计算为表达式。
在程序中,您可以使用表达式作为命令和函数的参数:
eg:
SET x = "Hello"
WRITE x,!
WRITE 1 + 2,!
WRITE $LENGTH(x),!
WRITE $ZVERSION
变量
在 ObjectScript 中,变量是可以存储运行时值的位置的名称。必须定义变量,例如使用 SET 命令,但不必键入变量。 ObjectScript 中的变量是无类型的;也就是说,它们没有指定的数据类型,并且可以采用任何数据值。 (为了兼容性, $DOUBLE 函数可用于将无类型浮点数转换为特定的数字数据类型格式。)
- ObjectScript 中的变量是无类型的
ObjectScript 支持多种变量:
- 局部变量 — 只能由创建它的 InterSystems IRIS 进程访问的变量,并且在进程终止时自动删除。局部变量可以从任何命名空间访问。
- 进程私有全局变量 — 只能由 InterSystems IRIS 进程访问的变量,并在进程结束时删除。进程私有全局可以从任何命名空间访问。进程私有全局变量对于临时存储大数据值特别有用。
- 全局变量 — 存储在 InterSystems IRIS 数据库中的持久变量。全局可以从任何进程访问,并且在创建它的进程终止后仍然存在。全局变量特定于各个命名空间。
- 数组变量——具有一个或多个下标的变量。所有用户定义的变量都可以用作数组,包括局部变量、进程私有全局变量、全局变量和对象属性。
- 特殊变量(也称为系统变量)— 一组特殊的内置变量之一,包含 InterSystems IRIS 操作环境特定方面的值。
- 所有特殊变量均已定义; InterSystems IRIS 将所有特殊变量设置为初始值(有时为空字符串值)。一些特殊变量可以由用户设置,其他变量只能由 InterSystems IRIS 设置。特殊变量不是数组变量。
- 对象属性 — 与对象的特定实例关联并存储在其中的值。
ObjectScript 支持变量上或变量之间的各种操作。变量在变量中进行描述。
- 这一点文档没有特殊的说明,可以在后续的文档之中查找相应的用法和描述。
操作符号
- 操作符号是所有语法的特点,基本是对一些内置类型做重载操作符,但是ObScript没有对应的类型,可以看看后续的文档的说明。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南