首先是语法的差异。这是最明显也最容易注意到的。比如下面这些基本的差别
<wbr></wbr> | Lotusscript | Java |
大小写 | 不敏感 | 敏感 |
句末 | 无 | 分号 |
变量声明 | Dim variable as type | Type variable; |
错误处理 | On error goto | try{}catch{} |
对象和值变量 | 区分,给对象变量赋值时需Set | 不区分 |
此外还有函数的声明、调用,Lotusscript中各种流程控制的结构都有不同的开始和结束语句而Java中使用()和{}完成等等。
这些只要了解对应的语法,都很容易将Lotusscript的代码移植到Java。容易出错的是这样一些规则上的细微差别。
<wbr></wbr> | Lotusscript | Java |
判断两表达式是否相等 | 比较两个值时用=,比较对象时用Is。 | == |
Select/Switch结构 | 每个条件执行的语句后不需要break。 | 需要break。 |
判断字符串是否相等 | = | 需使用字符串的equals方法。 字符串在Java中是对象。==比较的是两个对象变量的全等性,即两者是否指向同一对象。 两个来源不同的字符串,即使内容相同,也是不同的对象。 String s1=”abc”; String s2=”abc”; s1==s2; //false s1.equals(s2); /true |
定义常量 | 使用Const关键字 | 虽然Java保留了const关键字,但是使用final关键字标识一个字段不能改变(相当于定义常量)。 |
<wbr>其次是编程范式上的不同。Lotusscript是一种兼有面向过程和面向对象范式的语言,而且在传统的开发中大量使用的还是面向过程的风格,程序被组织成一个个函数。Java则是完全的面向对象的语言。即使只执行一行语句,也需要创建一个类。这种思想上的转换如果在Lotusscript开发中已经大量创建自定义对象也不难完成。</wbr>
再次是Java与Lotusscript特性的差别,包括Domino对象的API。
- Lotusscript中大量使用variant。这是一种标记了自身类型的多用途的数据结构。它使得一个函数可以处理多种不同的参数类型,比如Format。而且可以包含数组,使得数组的赋值和传递、返回成为可能。使用它,还可以形成一种“后期绑定”的效果,将不同类型又具有同样方法的对象用一个变量表示。Java中具有类似效果的就是Object。但是我们很少直接使用它,因为Java是一种强类型的静态语言,需要明确指定变量的类型。而且variant在Lotusscript的功能都被Java的特性一一实现。函数的多种不同的参数类型通过方法的重载解决。数组本身可以被传递给函数和被返回。“后期绑定”的效果可以通过类继承和接口实现。
- 为了使得一个函数能处理不同参数的情况,Lotusscript采用的方式是Variant和可选参数,Java则是通过方法重载。
- Domino对象的Lotusscript<wbr>API经常返回可变长度的数组,比如NotesDocument.GetItemValue()。在JavaAPI中,这些数组都被Vector代替,要取其中某个值时需要调用Vector.get()方法,或者在最常见的取仅有的第一个值时使用getItemValueAsString/Integer/Double()。</wbr>
- Lotusscript中含有一些用于与用户交互的语句,比如MessageBox,也可以访问Notes前端对象。Java只能访问Notes后端对象,并且与用户的交互需要通过页面和具体的控件、Javascript实现。
- Lotusscript中Variant未赋值时可用IsEmpty检测是否为空,对象变量未赋值时为Nothing,NotesAPI在未能获得有效对象时也返回Nothing。在Java中,这些都被null代替。
最后是Java开发在Domino领域特别需要注意的,这些方面即使是Java的老手也会觉得陌生。这主要包括两点:
- 对象的回收
- 安全性暨Session的创建
这两点都需要较长的说明,之后会专门介绍。