伝説のツール「NotesPeek」をQtでリメイクする(その5・@式その1)

@式、または@関数は、NotesがR4でLotusScriptを実装するまで、唯一の操作言語でした。@式はあらゆるところで使えます。フィールドの計算式、列式、UI操作(@Command)、Webの時代が来ても、CGIのような使い方ができたりしました。そんな@式は、API側から見るとどのようになっているのでしょう。NotesPeekリメイクプロジェクトにおいて、最初に出会うのはフォームのウィンドウタイトルになるので、これを中心に@式を見ていきます。

フォームは、文書です。

役割を省くと、フォームは文書(Note)に分類されます。データを保存するのか、文書のための設計要素を保存するかで、Noteは文書かフォームかに分けられます。Noteには「クラス」という属性値があり、文書はNOTE_CLASS_DOCUMENT、フォームはNOTE_CLASS_FORMとなります。厳密に言えば、NOTE_CLASS_FORMはフォーム以外の設計要素にも用いられています。初期のNotesはそれほど設計要素を持っていませんでしたが、バージョンを重ねていろいろな要望を取り入れる中で、クラスとしてはフォームでも、ある属性値を持って細分化されていきました。細分化された設計要素については、後日説明する機会があると思います。

ウィンドウタイトルは、フィールドです。

Note上に格納されるあらゆるものが、属性を除けばフィールドということになります。ウィンドウタイトルは、フォームというNote専用のフィールドになります。フィールドにもいろいろなタイプがあります。テキスト、数値、日時、リッチテキストなどがそうです。ウィンドウタイトルは何タイプなのか。これは「@式」型になります。Domino Designerを使って普通にフォームを作成する分には作ることのできないフィールド型です。

@式は、バイナリです。

@式は、バイナリになります。テキストとしての@式(文字列型)は、コンパイルすることでバイナリの@式になります。逆にバイナリの@式をデコンパイルするとテキストの@式が得られます。@式を評価する(@式を計算して値を得る)場合は、バイナリの@式から計算ハンドルというものを取得して、計算をさせます。通常、@式は文書をベースに計算します。フィールドの計算結果や、ビューの列式も、原則文書単位で計算されます。

話をウィンドウタイトルに戻します。フォームのウィンドウタイトルは、文字通り現在開いている文書情報を元に、ウィンドウやタブのタイトルとして表示するための@式です。フォームNoteの中には、フィールド名「$WindowTitle」の@式型(コンパイル済みのバイナリ)として格納されます。

なお、本プロジェクトでは、コンパイル済みの@式を使うので、当面はコンパイル(テキストからバイナリ)のプロセスは含めずに進めていきます。 (@式その2に続く)