第一章 疯狂Caché 介绍CachéObjectScript

第一章 Caché 介绍CachéObjectScript

简介

CachéObjectScript是一种对象编程语言,旨在快速开发复杂的业务应用程序。它非常适合各种应用,包括:

  • 商业逻辑
  • 应用整合
  • 数据处理

CachéObjectScript源代码被编译为在Caché虚拟机中执行的目标代码。该目标代码针对通常在业务应用程序中发现的操作进行了高度优化,包括字符串操作和数据库访问。ObjectScript程序可在Caché支持的所有平台上完全移植。

可以在以下上下文中使用CachéObjectScript:

  • 从Caché终端的命令行中进行交互。
  • 作为Caché对象类方法的实现语言。
  • 创建CachéObjectScript例程:Caché中包含并执行的各个程序。
  • 作为CachéSQL中存储过程和触发器的实现语言。
  • 作为CachéServer Pages应用程序中的服务器端脚本语言。

CachéObjectScript与其他Caché本机脚本语言完全兼容并可以互操作:CachéBasic。

特点

CachéObjectScript的一些关键功能包括:

  • 强大的内置函数可用于处理字符串。
  • 对对象的本机支持,包括方法,属性和多态性。
  • 用于在应用程序中直接控制流的各种各样的命令。
  • 一组用于处理I / O设备的命令。
  • 支持多维数组:局部和全局(持久)。
  • 支持高效的嵌入式SQL。
  • 支持间接以及运行时计算和命令执行。

语言概述

以下是CachéObjectScript的主要元素的介绍。

CachéObjectScript没有定义任何保留字:可以随意使用任何字作为标识符(例如变量名)。 为了做到这一点,CachéObjectScript使用了一组内置命令以及特殊字符(例如函数名的“ $”前缀),以便将标识符与其他语言元素区分开。

例如,要将值分配给变量,可以使用SET命令:

 SET x = 100
 WRITE x

在CachéObjectScript中,可以(尽管不建议使用)使用任何有效名称作为标识符名称,如以下程序所示,其功能与前面的示例相同:

 SET SET = 100
 WRITE SET

CachéObjectScript的某些组件(例如命令名称和函数名称)不区分大小写。CachéObjectScript的其他组件(例如变量名称,类名称和方法名称)区分大小写。

请注意,几乎可以在CachéObjectScript中的任何位置插入或省略空格。但是,对空格的一种使用是很重要的。语句不能从一行的第一个字符位置开始

因此,所有命令都必须缩进。注解也必须缩进。可以在一行的第一个字符位置出现的唯一代码元素是标签。标签可以简单地标识代码中的位置,也可以通过指定参数括号来标识过程块:

Main
   SET x = 100
   WRITE x
Proc1()
   WRITE "This is a separate block of code"

调用命令和功能

最简单形式的ObjectScript语法涉及对表达式调用命令,例如:

WRITE x

它调用变量x上的WRITE 命令(显示x的值)。在上面的示例中,x是一个表达式;ObjectScript表达式是一个或多个“tokens令牌”,可以对其求值以生成值。每个标记可以是文字、变量、一个或多个运算符的操作结果(例如两个数字相加的总和)、函数求值的返回值、这些的某种组合,等等。语句的有效语法涉及其命令、函数、表达式和运算符。

语句和命令

CachéObjectScript程序由许多语句组成。每条语句都定义了程序要执行的具体操作。每条语句都由一个命令及其参数组成。

 SET x="World"
 WRITE "Hello",!,x

WRITE是一个命令。它的作用正如其名称所暗示的那样:它将指定为其参数的任何内容写入当前主体输出设备。在本例中,Write写入三个参数:文字字符串“Hello”;“!”字符,它是特定于发出换行符/回车符的WRITE命令的符号运算符;以及局部变量x,它在执行期间被其当前值替换。参数之间用逗号分隔;还可以在参数之间添加空格。

大多数CachéObjectScript命令(以及许多函数和特殊变量)都有长形式和短(缩写)形式(通常是一个或两个字符)。例如,以下程序与前一个程序相同,但使用缩写的命令名:

 S x="World"
 W "Hello",!,x

命令名的简短形式只是为不喜欢输入长命令名的开发人员提供的一种工具。它完全等同于长格式。本文档使用长格式的命令名称。

函数

函数是执行操作(例如,将字符串转换为其等效的ASCII代码值)并返回值的例程。在命令行中调用函数。此调用向函数提供参数值,该函数使用这些参数值执行某些操作。然后,该函数向调用命令返回单个值(结果)。可以在任何使用表达式的地方使用函数。

Caché提供了大量系统提供的函数(有时称为“内部”函数),不能修改这些函数。这些函数是可识别的,因为它们总是以单个美元符号(“$”)开头,并将它们的参数括在括号中;即使没有指定参数,括号也是必需的。(特殊变量名也以单个美元符号开头,但没有括号。)

许多系统提供的函数名称都有缩写。在本手册的正文中,使用了完整的函数名称。

函数总是返回值。通常,此返回值被提供给命令,例如SET namelen=$LENGTH("Fred Flintstone")WRITE $LENGTH("Fred Flintstone"),或者提供给另一个函数,例如WRITE $LENGTH($PIECE("Flintstone^Fred","^",1))。未能为返回值通常会导致错误。但是,在一些函数中,不需要为返回值提供接收者。通过执行函数执行的操作(例如移动指针)或设置函数的一个参数是相关操作。在这些情况下,可以使用do或job命令调用函数,而不接收其返回值。例如,执行$CLASSMETHOD(clname,clmethodname,singlearg)

一个函数可以没有参数、单个参数或多个参数。函数参数是位置参数,用逗号分隔。许多参数是可选的。如果省略某个参数,Caché将使用该参数的默认值。由于参数是位置参数,因此通常不能省略指定参数列表中的参数。在某些情况下(例如$LISTTOSTRING),可以省略参数列表中的参数,并提供占位符逗号。不必在最后一个指定参数的右侧为可选参数提供占位符逗号。

对于大多数函数,不能指定同一参数的多个实例。例外是$CASE$CHAR$SELECT

通常,参数可以指定为文字、变量或另一个函数的返回值。在少数情况下,参数必须作为文字提供。大多数情况下,必须先定义变量,然后才能将其指定为函数参数,否则会生成错误。在少数情况下(如$DATA),不必定义参数变量。

通常,函数参数是向函数提供值的输入参数。函数不修改作为输入参数提供的变量的值,在少数情况下,函数既返回值又设置输出参数。例如,$LISTDATA返回一个布尔值,指示在指定位置是否有列表元素;它还(可选)将其第三个参数设置为该列表元素的值。

所有函数都可以在set命令的右侧指定(例如,set x=$length(Y))。还可以在set命令的左侧指定一些函数(例如, SET $LIST(list,position,end)=x)。

系统提供的函数是作为Caché的一部分提供的。CachéObjectScript语言参考介绍了系统提供的每个函数。类中提供的函数称为方法.

除了系统提供的函数外,ObjectScript还支持用户定义的函数(有时称为“外部”函数)。

表达式

表达式是可以计算为产生单个值的任何标记集。例如,文字字符串“hello”是一个表达式。l+2也是如此。变量(如x)、函数(如 l e n g t h ( ) ) ( length())和特殊变量(如 ZVERSION)也可计算为表达式。

在程序中,可以将表达式用作命令和函数的参数:

 SET x = "Hello"
 WRITE x,!
 WRITE 1 + 2,!
 WRITE $LENGTH(x),!
 WRITE $ZVERSION

变量

在ObjectScript中,变量是可以内存运行时值的位置的名称。例如,必须使用SET命令定义变量,但不必指定类型。CachéObjectScript中的变量是非类型化的;也就是说,它们没有指定的数据类型,可以接受任何数据值。(为兼容起见,可使用$DOUBLE函数将非类型化浮点数转换为特定的数字数据类型格式。)

CachéObjectScript支持几种变量:

  • 局部变量(Local Variables)-只有创建它的Caché进程才能访问的变量,该变量在进程终止时自动删除。局部变量可以从任何命名空间访问。
  • 进程-私有全局变量 仅可由Caché进程访问并在进程结束时删除的变量。进程私有全局可以从任何名称空间访问。进程私有全局变量对于临时存储大数据值特别有用。
  • 全局变量 存储在Caché数据库中的永久变量。全局可以从任何进程访问,并在创建它的进程终止后持续存在。全局变量特定于单个命名空间。
  • 数组变量 具有一个或多个下标的变量。所有用户定义的变量都可以用作数组,包括局部变量、进程私有全局变量、全局变量和对象属性。
  • 特殊变量(也称为系统变量) 一组特殊的内置变量之一,其中包含Caché操作环境的特定方面的值。Caché定义了所有特殊变量;Caché将所有特殊变量设置为初始值(有时为空字符串值)。一些特殊变量可以由用户设置,其他变量只能由caché设置。特殊变量不是数组变量。
  • 对象属性-与对象的特定实例相关联并存储在其中的值。

CachéObjectScript支持变量上或变量之间的各种操作。

运算符

CachéObjectScript定义了许多内置运算符。这些运算符包括算术运算符,如加法(“+”)和乘法(“*”)、逻辑运算符和模式匹配运算符

与ISO标准M的关系

CachéObjectScript是ISO 11756-1999年标准M编程语言的超集。

与ISO标准M相比,CachéObjectScript提供了许多重大改进

包括:

  • 集成了对对象和面向对象编程的支持。
  • 使用{}语法的过程块和控制块。
  • 放宽了空格要求。
  • 许多新功能。
原创文章 67 获赞 86 访问量 1万+

猜你喜欢

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