文章
· 十一月 22, 2022 阅读大约需 3 分钟

ObjectScript的命名规范

命名规范,英文叫"name convention", 是对写代码取名字的一些”共识“。也就是说, 你可以不遵守,但大家都选择了遵守,照者一个规范来。为什么呢?因为有社区,大家要共享代码, 你不照着规矩来, 别人会鄙视你, 懒的用你的代码。

ObjectScript以前没什么社区,大家各写各的, 使用ObjectScript的大公司也没谁把自己的代码拿出来共享。因此,个人开发者基本就是参考官方InterSystems的命名规范。举个例子, 比如以下的代码:

Class Ens.Util.ResponseBodyMethods
{
   property NoFailWhileDisconnected as %Boolean;
   property FirstName as %String;
   parameter SETTINGS = "ReplyCodeActions";

   method OnKeepalive(pAdapterStatus As %Status) as %String
   {
      return "okay"
   }
}

我来简单总结一下:

  • 包名和类名:Pascal格式,也就是首字母大写。其中%开头的是官方独占,

  • Property名字:首字母大写

  • method Name:同上。但出入参用的是驼峰格式,也就是第一个单词小写,后面单词大写开头。

  • Parameter Name:常量。

官方的代码都是这个规范吗? 大体上是,但也有例外, 比如%xsd包,包名类名全小写, 像这样: %xsd.string。这个从Caché年代就这样,我是不明白为什么这个包这么特殊。

到了IRIS上,更多瞎写了, 比如这个: %SYSTEM.external.SQL。不光是它,我发现很多和“external“相关的包名,都开始用小写了,写在代码里是这样的: %system.external.help(), %system.dotnet.SQL.addPath()。后面一个为什么SQL大小,dotnet小写,我也是没想明白。

然后,重要的来了。

InterSystems Developer Community贴出了这样的community代码命名规范。它是怎么被推广的呢? 通过zpm,也就是社区里的代码ObjectScript的包管理工具。曾经一度你要参加社区的代码比赛,就必须使用zpm打包,而zpm对使用这个代码规范有硬要求,所以这个convention得到了一定程度的接受,能看到越来越多的开发者这么写代码了。

原文上面有链接,这里说最重要的:

package名字全小写,class名字用首字母大写。比如class会定义成:

class company.project.subpackage.TheClass{
   ...
}

这基本上是借鉴Java。作者也说了:The approach borrowed from the naming convention for java classes. 作者还做了个解释:全小写的Package名字避免了和class或者interface的名字冲突。这句话我不是很明白。

我觉得网友只所以接受它,纯粹就是java和python用惯了,烦大写的类名。 如果都是c++, c#的程序员,估计这个命名规范还得有得吵。

我这里只说了包名类名, 其他的method, property, 变量的命名什么的,还包括github上repo起名字的规范, 有兴趣去原文看看吧。

我是挺喜欢这个规范的。

唯一有点不满意的是:Java中定义Package name 和class name不是连着写在一起的,比如下面:

package org.springframework.asm;

public abstract class AnnotationVisitor {
    ...
}

所以你很少能看到包名和类名连写在一起的情况,所以小写的小写, 大写的大写,都不挨着。而ObjectScript的类定义一定要写全了, 上面的定义如果在ObjectScript里就是:

public class org.springframework.asm.AnnotationVisitor {
    ...
}

因此这样的写法会有个视觉上的大小写的落差。

我属于没事找事的。

结论: 社区有了命名规范,矮骡子们纷纷表示支持。

按这个convention,Tony老师如果去写一个示例代码贡献给社区的话,可能是这样的

class com.dhc.tony.demo.xml.TestUtils
{
   property noFailWhileDisconnected as %Boolean;
   property firstname as %String;
   parameter SETTINGS = "ReplyCodeActions";

   method onKeepalive(pAdapterStatus As %Status) as %String
   {
      return "okay"
   }
}
讨论 (2)1
登录或注册以继续