携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第37天,点击查看活动详情
第2讲 初识M程序
语言概述
- 变量名称,类名称和方法名称区分大小写。
- 语句不能从一行的第一个字符位置开始。
- 所有命令都必须缩进。注解也必须缩进。
- 大多数ObjectScript命令(以及许多函数和特殊变量)都有长形式和短(缩写)形式(通常是一个或两个字符)
/// d ##class(YX.First).Command()
ClassMethod Command()
{
set yx = "姚鑫"
write yx,!
s yx = "姚鑫"
w yx,!
}
- s是set命令的缩写,是赋值定义变量命令,将yx值为姚鑫。
- w是write命令的索引,是显示yx变量的值。
变量
- 在ObjectScript中,变量是可以内存运行时值的位置的名称。也就是说变量存在内存中。
- 必须使用SET命令定义变量,但不必指定类型。也可以理解为泛型。
- 变量是非类型化的;也就是说,它们没有指定的数据类型,可以接受任何数据值。
- 支持的几种变量:
- 局部变量 - 只有创建它的Caché进程才能访问的变量,该变量在进程终止时自动删除。局部变量可以从任何命名空间访问。
s name = "yao xin"- 进程私有全局变量 - 仅可由Caché进程访问并在进程结束时删除的变量。进程私有全局可以从任何名称空间访问。进程私有全局变量对于临时存储大数据值特别有用。
s ^||yx = "yao xin"- 全局变量 - 存储在Caché数据库中的永久变量。全局可以从任何进程访问,并在创建它的进程终止后持续存在。全局变量特定于单个命名空间。
s ^yx = "yao xin"- 数组变量 - 具有一个或多个下标的变量。所有用户定义的变量都可以用作数组,包括局部变量、进程私有全局变量、全局变量和对象属性。
s color("red") = "red" s color("yellow") = "yellow" s color("green") = "green"- 特殊变量(也称为系统变量) 一组特殊的内置变量之一,其中包含Caché操作环境的特定方面的值。Caché定义了所有特殊变量;Caché将所有特殊变量设置为初始值(有时为空字符串值)。一些特殊变量可以由用户设置,其他变量只能由caché设置。特殊变量不是数组变量。
w $zversion w $namespace- 对象属性 - 与对象的特定实例相关联并存储在其中的值。
Property name As %String; /// d ##class(YX.First).Variable() ClassMethod Variable() { s mYx = ..%New() s mYx.name = "姚鑫" w mYx.name,! }
表达式
- 表达式是可以计算为生成单个值的任何标记集
/// d ##class(YX.First).Expression()
ClassMethod Expression()
{
s name = "yao xin"
w name,!
w 1 + 2,!
w $l(name),!
w $zversion
}
函数
- 函数是执行操作(例如,将字符串转换为其等效的ASCII代码值)并返回值的例程。在命令行中调用函数。此调用向函数提供参数值,该函数使用这些参数值执行某些操作。然后,该函数向调用命令返回单个值(结果)。可以在任何使用表达式的地方使用函数。
(一般例程里叫做函数,类里叫做方法。)
- Caché提供了大量的系统函数,不能修改这些函数。这些函数美元符号(“$”)开头,参数括在括号中;即使没有指定参数,括号也是必需的。
(特殊变量名也以单个美元符号开头,但没有括号。)
- 许多系统提供的函数名称都有缩写。
/// d ##class(YX.First).Funciton()
ClassMethod Funciton()
{
s yx = $length("姚鑫")
w "全拼" _ yx,!
s yx = $l("姚鑫")
w "缩写" _ yx,!
}
- 函数总是返回值。通常,此返回值被提供给命令。
- 在一些函数中,不需要为返回值提供接收者。可以用do 或 job命令
d $classmethod("YX.First","Command")
- 一个函数可以没有参数、单个参数或多个参数。函数参数是位置参数,用逗号分隔。许多参数是可选的。如果省略某个参数,Caché将使用该参数的默认值。由于参数是位置参数,因此通常不能省略指定参数列表中的参数。
s yx = "姚鑫是一名开发工程师"
w "省略参数默认截取第一个参数" _ $e(yx),!
w "截取第一个字符:" _ $e(yx, 1),!
w "截取一到二个字符:" _ $e(yx, 1 , 2),!
- 通常,参数可以指定为字符串、变量或另一个函数的返回值。在少数情况下,参数必须作为字符串提供。
ClassMethod GetStr()
{
q "姚鑫是一名开发工程师"
}
w "参数为字符串:" _ $e("姚鑫是一名开发工程师",1),!
w "参数变量:" _ $e(yx, 2),!
w "参数另一个函数的返回值:" _ $e(..GetStr(), 3),!
- 大多数情况下,必须先定义变量,然后才能将其指定为函数参数,否则会生成错误。在少数情况下,不必定义参数变量。
w "没有定义变量:" _ $d(str),!
s str = 0
w "定义变量:" _ $d(str),!
- 函数参数是向函数提供值的输入参数。函数不修改作为输入参数提供的变量的值。在少数情况下,函数既返回值又设置输出参数。
s color = "red,green,yellow"
w "未修改color变量:" _ color,!
s $p(color, ",", 1) = "write"
w "修改color变量:" _ color,!