本技能基于作者总结的IRIS代码规范,提供ObjectScript代码的格式化、审查和修正能力。涵盖变量命名、方法命名、锁、事务、陷阱、格式、空行、注释等多个维度,确保代码风格统一、可读性强、维护性高。
该技能的作者: 姚鑫
作者邮箱: 454115408@qq.com
当用户提出以下请求时激活此技能:
$、 # 等特殊符号开始或结束lowerCamelCase^CacheTemp*,不允许有其它的命名。旧命名方式以^ TEMP*、^Temp*、^temp*、^TMP*、^Tmp*、^tmp*、开头的均不合法。^||TMP,节点必须携带pidis 开头,使用 Flag 后缀(如 dispFlag)表ID + Data 方式(如 bisData)i,长度用 lenm 前缀(如 mExecute)SQLCODE)ret,禁止使用 err%z 开头.inc 文件通用变量加前缀标识UpperCamelCaseIs 开头,加 As %Boolean,正向描述(存在返回$$$YES)Query,获取数据用 Get&sql()),SQL语句应当单独建立类来保存负数^错误信息..RetFail("错误信息")$$$ERROR($$$GeneralError,"错误信息")+、 - 严格控制,必须成对出现+,否则导致解锁进程内所有锁:3),避免死锁^产品组代码(产品线,规范代码:唯一标识)ts、 tc、 tro 位置保持近距离,在一屏幕范围内ts、 tc、 tro)ts、 tc 首尾添加空行或注释Not ProcedureBlock 类陷阱名称统一为 Err + 方法名Error$zt = "" 避免死循环$tl > 0 时执行 tro 避免开放性事务lock 避免开放锁=、 +、 -、 *、 /、 _、 :)左右加空格for、 while 外)$e, $p, $l, $o 等)%ArrayOfDataTypes 或JSON,不建议字符串拼接系统命令缩写规则:
for、 while 、 if 、 elseif、 else、 continue 命令使用全拼(语义明确,表示循环结构)全拼缩写说明sets赋值dod执行quitq退出/返回breakb跳出循环killk删除变量newn新建变量writew输出readr读取tstartts事务开始tcommittc事务提交trollbacktro事务回滚lockl加锁openo打开设备closec关闭设备useu使用设备hangh暂停jobj启动作业mergem合并
系统函数缩写规则:
全拼缩写说明$extract$e提取子串$piece$p按分隔符提取$length$l获取长度$order$o遍历global$get$g安全获取值$data$d判断变量是否存在$find$f查找子串$ascii$a获取ASCII码$char$cASCII转字符$translate$tr字符替换$justify$j格式化对齐$zboolean$zb位运算$zconvert$zcvt编码转换$zhex$zh十六进制转换$zdate$zd日期格式化$ztime$zt时间格式化$ztimestamp$zts时间戳$increment$i自增$random$r随机数$stack$st堆栈信息
尽量使用对仗词(add/remove, get/set等)
禁止 {} 和 . 同时出现,推荐使用块级语法
所有 if 语句都要换行写
if 嵌套不宜过多,建议不超过3层
多级 if else 考虑用 $case 替换
与或逻辑运算统一使用 &&、 ||
块级语法命令要全拼( for、 while 而非 f、 w)
后置表达式要加括号,等号两侧加空格
多条件后置表达式(如 continue: q: 后的条件):括号 内部 的条件运算符两侧 加空格,括号与 &&/ || 之间 不加空格。例如:
q:(inci = "")&&(arcim = "")&&(phcdf = "") - 括号内 = 两侧有空格,括号与 && 之间无空格q:(inci = "") && (arcim = "") && (phcdf = "") - 括号与 && 之间有空格,会导致编译错误} else { 不换行,写在同一行
#; 规则#;,句尾注释用 /////objectscript
/// desc: 类用途描述
/// author:姓名全拼
/// date:YYYY-MM-DD
Class XXX.XXX
objectscript
/// desc: 方法描述
/// author: 姓名
/// createDate: YYYY-MM-DD
/// params: 参数说明
/// return: 返回值说明
/// version: 版本
/// modify: 修改记录
/// debug: 调试方法
执行以下步骤审查和修正代码:
多条件后置表达式必须严格遵守以下格式:
objectscript
; 正确格式 - 括号内运算符两侧加空格,括号与&&之间不加空格
continue:(hospId '= "")&&(hospId '= ($p(^CTLOC(locId),"^",22)))
q:(inci = "")&&(arcim = "")&&(phcdf = "")
; 错误格式 - 会导致IRIS编译错误
continue:(hospId '= "") && (hospId '= ($p(^CTLOC(locId),"^",22)))
q:(inci = "") && (arcim = "") && (phcdf = "")
修正逻辑:
q: continue: b: 等命令后的条件)(条件)(a = "") (b <= 0)&&/ || 之间 绝对不能 加空格: )&&( 不是 ) && (for、 while、 if、 elseif、 else、 continue 使用全拼s/ d/ q/ b/ k/ n/ w/ r/ ts/ tc/ tro/ l/ o/ u/ h/ j/ m使用缩写形式: $e/ $p/ $l/ $o/ $g/ $d/ $a/ $c/ $tr/ $j/ $zb/ $zcvt/ $zh
审查结果应包含:
text
## 代码审查报告
### 问题汇总
- [严重] 问题1描述(行号)
- [警告] 问题2描述(行号)
### 详细说明
#### 1. 变量命名问题
**位置**:第X行
**问题**:描述
**规范依据**:引用具体规则
**建议修正**:
// 修正后的代码
#### 2. 方法命名问题
...
### 修正后完整代码
**IMPORTANT**: 必须输出完整的修正后代码,不要省略任何部分。将用户提供的完整代码按照规范修正后全部输出。
// 完整修正后的代码(必须包含所有方法,不得省略)
类别规则正确示例错误示例变量名lowerCamelCasestartDate``startdate常量全大写MAXCOUNT``MaxCount布尔变量Flag后缀dispFlag``isDisp方法名UpperCamelCase, 动宾结构GetName()``getname()布尔方法Is开头IsExist() As %Boolean``GetExistFlag()事务简写小写ts / tc``TSTART锁带+/-和超时l +^XXX:3``l ^XXX注释符#; 或 //#; 说明 ``; 说明空格运算符两侧a = b``a=b命令除for/while外使用缩写s, d, q, for``set, do, quit, f系统函数使用缩写$e, $p, $l, $o``$extract, $piece, $length, $order逻辑运算&& ||(a)&&(b)``a,b后置表达式括号内空格,括号外无空格q:(a = "")&&(b = "")``q:(a = "") && (b = "")
references/代码规范 - 变量.mdreferences/代码规范 - 方法.mdreferences/代码规范 - 格式.mdreferences/代码规范 - 空行.mdreferences/代码规范 - 事务.mdreferences/代码规范 - 锁.mdreferences/代码规范 - 陷阱.mdreferences/代码规范 - 注释.md