[Notes/Domino] VB6 には無い LotusScript の便利な機能
LotusScript は一応 VB 互換ということになっていますが、以下のように VB6 にはあるのに、LotusScript には無い機能もあります。わたしが特に困っているのは、以下の機能です。早くサポートしていただきたいものです……。
- デフォルト引数が使えない。(Optional ~ As String = "Value" みたいなやつ。これが無いとすごい困る…… 😥 )
- 関数ポインタが使えない。(C関数の呼び出しで困る…… 😥 )
(余談ですが、R5以下だと、Boolean型やByte型が無いとか(C関数に構造体を渡すときに面倒だった……)、入力候補が出ないとか、R4.5 ではスクリプトが色分けされていないとか、悲惨でしたね……(涙))
が、悪いこともあれば、良いこともあります。VB6 には無く、LotusScript にはある便利な機能も存在します。
わたしが今までいろんな技術者の方とお話し、DB のコードを見た結果、以下の2つの機能が割と知られていないようでした。
ヘルプにも書いてあることですし、すでにご存知の方には釈迦に説法ですけど、ご存知無い方は、この機会に覚えちゃってください。
文字列リテラル
文字列リテラルを作成するには、通常ダブルクォーテーションを使用します。
Dim s As String s = "てすと"
LotusScript では、ダブルクォーテーションに加えて、縦棒( | )または中括弧( { } )が使用できます。また、縦棒と中括弧では、改行も含めることもできます。
どちらを使うか迷うかもしれませんが、個人的には、以下のように使い分けています。
1. HTML を出力するときは縦棒(CSS に中括弧が含まれるので)
Dim s As String s = | <style type="text/css"> p { margin: 0px; } </style> |
2. @関数式を作成する場合は中括弧(縦棒だと Or の意味の縦棒とバッティングするので。中括弧は @Matches くらいしか使われない)
Dim ss As New NotesSession Dim db As NotesDatabase Dim col As NotesDocumentCollection Set db = ss.CurrentDatabase Set col = db.Search({Form = "FrmTest" & Flag = "1"}, Nothing, 0)
上記のように、縦棒や中括弧を使うと、ダブルクォーテーションを2つ書いたりする煩わしい作業から解放されますし、ヒアドキュメントっぽく改行しながら文字列を定義することができたりします。
ただし、スクリプトライブラリの Declarations で定数を宣言するときに、多くの改行を含む長い文字列を縦棒や中括弧で宣言すると、値を変えた場合に、Use 先の設計も保存し直さなければならないケースがあるようです。(具体的にどのような場合というのが不明ですが、経験的に、左記のようなケースが多いようです。)まあ、リコンパイルすればいいのかもしれませんが、一応注意してください。
リスト変数
他の言語でいうところの連想配列やハッシュに相当するものが、LotusScript でも使用できます。(VB6 でも、Dictionary を使用すれば可能ですが、組み込みではないということで。)
Dim s List As String
s("aaa") = "あああ"
s("bbb") = "いいい"
s("ccc") = "ううう"
Forall v In s
Print Listtag(v) & " - " & v
End Forall
'出力
'aaa - あああ
'bbb - いいい
'ccc - ううう
普通の配列のように配列の上限を指定する必要が無く、文字列をタグとして使用でき、簡易的なデータベースのようにデータを管理できるので、とても便利です。
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。