文章
· 十月 18, 2022 阅读大约需 4 分钟

COS的基本语法

ObjectScript是一种面向对象的编程语言,它是InterSystems公司的Caché和Ensemble数据库的核心语言之一。ObjectScript语言的语法类似于MUMPS语言,它支持面向对象编程、过程式编程、函数式编程等多种编程范式。ObjectScript语言主要用于开发Caché和Ensemble数据库应用程序,它可以访问数据库中的数据、调用数据库中的存储过程、触发器和事件,还可以与其他编程语言进行交互。

Cache使用的语言是ObjectScript简称COS,下面展示的是其基本语法,也是我个人的COS字典:

1 系统指令

SET           缩写 s ,赋值命令,样例 - s hello ="Hello World"

WRITE      缩写 w ,向当前设备输出,样例 - w hello (特殊用法:w ! 换行、w # 清屏

DO            缩写 d ,执行函数,样例 – d ##class(%SYSTEM.License).ShowSummary();

Kill            缩写 k ,从堆栈中清楚变量 x,慎用(不加参数调用时候将清楚内存中的所有变量!)样例 - k x

Quit          缩写 q , 返回 样例 - q $$$OK

注意:系统指令不区分大小写,变量和对象大小写敏感

2 数据类型

%Integer         整数型             0,1,2,3,4,5,6......

%Boolean       布尔类型          0-F 1-T

%String          字符串类型      "你好,世界"

%Date             时间类型

 

更多的数据类型:

https://docs.intersystems.com/healthconnect20201/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_proplit#GOBJ_C27523

3 运算符

数学运算符      加减乘除+,-,*,/ W 2+3+2*2 14 运算时严格从左到右执行,数学运算没有优先级 W 2+3+2*2 9

连字符_           W "shanghai"_"disney"

逻辑运算符      与或非&, ||, ‘ W 1&0

 

4 流程控制

For 循环         FOR variable=start:increment:end { . . . }

#; 第1种
    For i = 1:1:9 {

        Write i, !

    }

#; 第2种
    Set key = ""
    For {

        Set key = $ORDER(array(key))

        Quit:key=""
        // process array(key)
    }

#; 第3种
    For value = "Red","Green","Blue" {

        Write value, !

    }

If else判断      IF expression1 { . . . } ELSEIF expression2 { . . . } ELSE { . . . }

If a>0{

  w a

}ElseIf a<0&&a=-1{

  w a

}ElseIf a<-1{

  w a

}else{  

  w a

  }

While循环      WHILE expression,... { ;. . . }

#; 第1种
   Do {

   

   } While (1 /* condition */)

#; 第2种
   While (1 /* condition */) {

   

   }

 

5 系统变量

当前时间    $Horolog                — W $H

时间戳       $ZTIMESTAMP      —  w ZTS

系统版本    $ZVERSION           — W $ZV

注意:系统变量不区分大小写

 

更多系统变量

https://docs.intersystems.com/healthconnect20201/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_VARIABLES

6 函数

字符串类型与日期类型相互转换:    $ZDH/$ZD

— w $ZDH("2017-03-13",3)

— w $zd(0)

 

字符串截取函数:    $piece

— W $P("This is training", " ",3)

 

字符串比较替换函数: $Case

— W $case(10,1:"100",2:"200",:"1000")

 

按值查找,并返回一个整数,该整数指定子字符串中的结束位置 $FIND

w $f("acvs","c",1) 输出为字符串的位置,输出为0标识不存在

 

更多函数:

https://docs.intersystems.com/healthconnect20201/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_FUNCTIONS

7 Global

Global算是IRIS的一个特殊概念,其实可以把它理解为可以持久化的多维数组,下面展示的是把Global当成多维数组的处理方式

下标:可以是数字也可以是字符串

操作:赋值 - set(s) 、删除 - kill(k)

持久化:多维数组命名时候以 ^ 开头,会按下标存储,如果用的是HealthConnect或者IRISHealth在【系统资源管理器】- Global】中可以看到。

 

样例:

s a = 1,a(1) = "a",a(1,1) = "b",a(1,1,"wow") = "foo",a(1,2) = "c",a(2) = 0 zw a

(这里,的意思代表省略了前面的 set 系统指令)如图:

讨论 (2)2
登录或注册以继续