和学习其它语言一样,我们需要先了解Caché的基本语法。其实,Caché有3种语法:Caché Object Script(COS), Caché Basic, Caché MultiValue Basic。鉴于使用的广泛程度,这里只介绍COS。
首先需要声明,COS不是强类型语言,变量不需要事先声明。这一点非常重要,很多初学者不适应,甚至很反感 — 这很正常,毕竟我们生活在强类型语言的世界里: java、C++…, Caché的确比较异类。
基本命令
COS中命令不多,我们先介绍最常用的。注意:所有COS命令不区分大小写,同时大部分都有缩写。
既然COS不是强类型,那么我们不需要事先声明变量。我们就从设定变量开始:
SET是设定变量的命令,缩写为S,语法为Set x=value。例如,在Terminal里执行
Set x="Hello, World"
如果需要同时将很多变量赋为相同的值,这是你可以Set (x,y,z)=value:
Set (x,y,z) = "yes"
有时,你也会看到这样的写法:Set x=value1, y=value2。这是缩写,等同于
Set x=value1
Set y=value2
WRITE命令将结果输出到当前设备,缩写为W,语法为 Write x。例如,在Terminal里执行
Set x="Hello, World"
Write x
也可以一次输出多个变量,变量间用,分割,如
Write "The value is: ", x
虽然WRITE命令在今后面向对象编程中很少用到,但在调试时很常用。有时需要将结果按格式输出时,可以加入控制字符,如!# ?等。!表示回车,#表示刷出新屏,?后面跟数字表示在那一列输出。在Terminal里执行
Write "Current time is",!,?15,$ZT($ZTS)
DO用来执行代码,缩写为D,语法为 Do routine。例如,在Terminal里执行
Do $System.OBJ.ShowObjects("d")
IF判断缩写为I,语法为:
IF expression1 {
. . .
}
ELSEIF expression2 {
. . .
}
ELSE {
. . .
}
例如在Terminal里执行
if 2=1 {w "2=1"} else {w "2<>1"}
For循环的缩写为F,语法为
FOR start:increment:end {. . .}
例如,在Terminal里执行
FOR i=2:1:10 {w i,!}
有时,你会看到没有end条件的For循环,这时需要指定循环退出条件,如下面的例子里当i大于10时会退出循环:
FOR i=1:1 {if i>10 {quit} else {w i,!}}
While循环没有缩写,语法为:
WHILE expression,... {}
例如,在Terminal里执行
Set y=1 WHILE y < 10 { Set y=y+1 WRITE y,! }
QUIT是终止执行命令,缩写为Q。可以带返回参数,语法为:
QUIT expression
经常会看到command:(expression) 的语法,如Set :(x=1) y=2。该语法是当expression表达式为True时,执行相应命令,等同于if (expression) command。所以Set :(x=1) y=2等同于if (x=1) {set y=2}。