携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第38天,点击查看活动详情
第3讲 语法规则
区分大小写
-
区分大小写
- 变量名(局部变量、全局变量和进程私有全局变量)
- 变量下标
- 类名
- 方法名
- 属性名
- 属性的实例变量的i%
- 例程名
- 宏名
- 宏包含文件(.inc文件)名
- 标签名
- 锁名
- 嵌入式代码指令标记字符串、
- 嵌入式SQL主机变量名。
-
不区分大小写
- 命令名
- 函数名
- 特殊变量
- 命名空间名
- sql语句
- 预处理器指令(如#include)
- 嵌入式代码指令(&html、&js和&sql)
空格
空格视为语法上有意义的。除非另有说明,否则空白指的是空格、制表符和换行符。
不需要空格
-
标签(也称为标记或入口点):标签必须出现在第一列,前面没有空格字符。如果一行有标签,则标签与该行上的任何代码或注释之间必须有空格。如果标签有参数列表,则在标签名称和参数列表的左括号之间不能有空格。参数列表中的参数之前、之间或之后可以有空格。
-
多行注释:多行注释的第一行前面必须有一个或多个空格。多行注释的第二行和后续行不需要前导空格。
/*
asd */
需要空格
- 命令及其第一个参数之间必须且只有一个空格
s yx = "yx"
s yx = "yx"
- 如果命令使用后置条件,则命令与其后置条件之间没有空格。
q:yx '= ""
q:(yx '= "")
- 在任何一对命令参数之间可以有任意数量的空格。
if yx = "" s yx = "yao xin"
- 如果一行包含代码,然后是单行注释,则它们之间必须有空格。
s yx = "yx"//注释
s yx = "yx" //注释`
- 通常,每个命令都显示在自己的行上,不过可以在同一行上输入多个命令。在这种情况下,它们之间必须有空格;
yx = "yx" w "1"
- 如果一个命令是无参数的,那么它后面必须跟两个空格。
l w "11"
- CachéStudio提供内置的语法检查,因此它将标记任何非法使用的空格。
注释
- /**/ 注释 可以显示在一行内,也可以跨行显示。
- // 注释 指定该行的其余部分是注释;它可以是该行的第一个元素,也可以跟在其他元素之后。
- ; 注释 指定该行的其余部分为注释;它可以是该行的第一个元素,也可以跟在其他元素之后。
- ;; 注释 ;注释类型的特殊类型。(不推荐)
- /// 注释用作紧随其后的类或类成员的类引用内容。对于类本身,类定义开始之前的///注释提供类引用内容的类描述,这也是类的Description关键字的值)。
(注意:因为Caché在目标代码(实际解释和执行的代码)中保留了;;注释,所以包含它们会影响性能,并且它们不应该出现在循环中。)
/// 注释描述
/// d ##class(YX.First).Comment()
ClassMethod Comment()
{
w $p("apple,banana,organe" /* 水果 */,",",2),!
w "apple",/* 水果" */" banana",!
s x = "organe"/* 水果" */ WRITE x,!
w "organe"/* 水果" */ // "其他注释"
}
DHC-APP>d ##class(YX.First).Comment()
banana
apple banana
organe
organe
文字值
文字值就是组成变量的表达式,由一系列表示特定字符串或数值的字符组成的常量值
s x = "hello"
s y = 10
字符串
- 最大字符串大小是可配置的。如果启用了长字符串,则最大字符串大小为3,641,144个字符。否则,最大字符串大小为32,767个字符。默认情况下启用长字符串。
- 字符串文字是由引号包含的一组零个或多个字符
- 字符串可以包含任何字符,包括空格和控制字符。字符串文字的长度以字符串中的字符数而不是字节数来度量。
s str ="这是一个字符串"
w $l(str),!
s str ="this is a string"
w $l(str),!
- 所有字符串都可以输入的。可以使用$CHAR函数指定不可输入的字符.
s str = "abc"
w str,!
zzdump str
s str = $c(945) _ $c(946) _ $c(947)
w str,!
zzdump str
- 并非所有字符串字符都可显示。它们可以是非打印字符或控制字符。
s str = "a" _ $c(0) _ "b" _ $c(9) _ "c" _ $c(10, 13) _ "d"
w !!,str,!
w $l(str),!
zzdump str
- 要在字符串中包含引号字符(“),请将字符加倍
s str = """"""
w !!,str,!
w $l(str),!
zzdump str
- 不包含任何值的字符串称为空字符串。它由两个引号字符("")表示。空字符串被视为已定义的值。它的长度为0,空字符串与由空字符($CHAR(0))组成的字符串不同
s str = ""
w "空字符串:" _ $l(str),!
s str = $c(0)
w "$c(0)字符串:" _ $l(str),!
数字
数字文字值是ObjectScript计算为数字的值。
/// d ##class(YX.First).Number()
ClassMethod Number()
{
s x = +++00008.000
w "数字长度:", $l(x),!
w "数字值:" , x,!
w "相等:" , x = 8,!
w " + 1:" , x + 1,!
}
数字字符串表示为用引号括起来的字符串数字。
s x = "+++00008.000"
w "数字长度:", $l(x),!
w "数字值:" , x,!
w "相等:" , x = 8,!
w " + 1:" , x + 1,!
| 值 | 数量 |
|---|---|
| 数字0-9 | 任何数量,但至少有一个。 |
| 符号运算符:减号(-)和加号(+)。 | 任何数量,但必须在所有其他字符之前。 |
| 小数分隔符字符(默认情况下为句点或小数点字符;在欧洲区域设置中为逗号字符)。 | 最多一个。 |
| 字母“E”(用于科学记数法)。 | 最多一个。必须出现在两个数字之间。 |
科学记数法:用指数记数法表示的数字。
w 3.5E10,!
标识符
- 标识符是变量、例程或标签的名称。通常,合法标识符由字母和数字字符组成,标识符区分大小写。
- 标识符的第一个字符可以是百分号(%)字符。以%字符开头的名称保留为系统元素。
- Caché中没有保留字;可以使用任何有效的标识符作为变量名、函数名或标签。
- 最好避免使用命令名、函数名或其他此类字符串的标识符。
- ObjectScript代码包括对嵌入式SQL的支持,避免使用SQL保留字命名任何函数、对象、变量或其他实体。
标签
标签即子例程
标签具有以下命名约定:
- 第一个字符必须是字母数字字符或百分比字符(%)。
- 它们最长可达31个字符。标签可以长于31个字符,但在前31个字符内必须是唯一的。标签引用仅与标签的前31个字符匹配。
- 区分大小写。
/// d ##class(YX.First).Number()
ClassMethod Label()
{
yao
XIN
31yao
%xin
}
- 可以使用$ZNAME函数来验证标签名称。验证标签名称时,请不要使用参数括号。
w $zname("%xin")
w $zname("#%xin")
注意:标签提供入口点,但它没有定义封装的代码单元。这意味着一旦标记的代码执行,执行将继续到下一个标记的代码单元,除非执行被停止或重定向到其他地方。
/// d ##class(YX.First).Label()
ClassMethod Label()
{
s x = $random(2)
if x=0 {
d label0
w "label0结束",!
q
} else {
d label1
w "label1结束",!
q
}
label0
w "label0内 开始",!
w "label0外 结束",!
label1
w "label1内 开始",!
w "label1外 结束",!
}
有三种方法可以停止执行代码单元:
- 执行遇到退出或返回 ( QUIT or RETURN )。
- 执行遇到尝试的右大括号(“}”)。发生这种情况时,执行将从关联的CATCH块后面的下一行代码继续执行。
- 执行遇到下一个过程块(带有参数括号的标签)。遇到带括号的标签行时,即使括号内没有参数,执行也会停止。