メソッド
メソッドとは、1つ以上の動作を実行するコードのことです。 メソッドは、1つ以上のステートメントで構成されます。
ステートメントは 1つの命令を実行し、単純な場合もあれば複雑な場合もあります。 ステートメントとは通常、メソッドの 1行のことを指します (必要に応じて \ 文字を使って行を分割 することができます。
メソッドは最大 2GBのテキストまたは、32000行まで記述できます。
メソッドタイプ
4D ランゲージにおいて、数種類のメソッドが存在します。 その呼び出し方によって、メソッドは区別されます:
| 型 | 自動呼び出しのコンテキスト | 引数の受け取り | 説明 |
|---|---|---|---|
| プロジェクトメソッド | プロジェクトメソッド名が呼び出された時 に応じて | ◯ | 任意のアクションを実行するためのコードです。 作成されたプロジェクトメソッドは、そのプロジェクトのランゲージの一部となります。 |
| オブジェクト (ウィジェット) メソッド | メソッドが設定されたフォームオブジェクトに関連したイベント発生時に | × | フォームオブジェクト (ウィジェットとも呼びます) のプロパティです。 |
| フォームメソッド | メソッドが設定されたフォームに関連したイベント発生時に | × | フォームのプロパティです。 フォームメソッドを使用してデータとオブジェクトを管理することができます。 ただし、これら目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。 |
| トリガー (別名 テーブルメソッド) | テーブルのレコード操作 (追加・削除・修正) の度に | × | テーブルのプロパティです。 トリガーは、データベースのレコードに対して「不正な」操作がおこなわれることを防ぎます。 |
| データベースメソッド | 作業セッションのイベント発生時に | ○ (既定) | 4D には 16のデータベースメソッドがあります。 |
| クラス | クラスのオブジェクトがインスタンス化されたとき、あるいは他のメソッドやデータベースフィールド 内においてオブジェクトインスタンス上でクラスの関数が実行されたときに自動的に呼び出されます。 | ◯(クラス関数) | オブジェクトのクラスのconstructor, properties と関数 を宣言および設定するためには、Class が使用されます。 クラス およびFunction クラス 参照。 |
ランゲージトークン
4Dランゲージでは、コード内で使用される全てのオブジェクト名(定数、コマンド、テーブル、フィールドそしてキーワード) 全てに対してユニークな トークナイゼーションシステムというものを持っています。 これらの名前をトークナイズするということは、それらをコードエディターにタイプする際に内部で絶対参照(数値)と して保存され、実行時、あるいは表示時にコンテキストに応じてテキストとして復元されるということを意味します。 これにより、コードは常に正しく解釈され るということが保証され、テーブルやフィールドの名前を変更した場合でも、4Dランゲージコマンドが異なるアプリケーションのバージョンに置いて改名され た場合等でも正しく解釈されます。
注意: これは環境設定のメソッドページの"リージョンシステム設定を使用"オプション を有効化し、お使いの4D を異なる言語設定でデータベースを開いた際にも、コードの自動翻訳が正確であることを保証します。
トークナイゼーションは4D デベロッパーからは4D コードエディター 上では通常は完全に透過で心配することは何もありません。 しかしながら、トークナイゼーションに対してアクションを取る必要がある場合が2つ考えられます。それを無効化したい場合、それからフォーミュラ内でトークナイゼーションを使用したい場合です。
トークナイゼーションの無効化
あなたのプロジェクトがGitHub やGitLab などのバージョン管理システム(VCS) を使用している場合、外部プラットフォームにおいてコードをより読みやすくするために、トークナイゼーションを無効化したい場合があるかもしれません。 これを行うためには、Project ソースファイルにトークンを含める 設定をオフにすることで新規プロジェクト 内にトークンが保存されることを防ぐことができます。
既存のプロジェクト においては、テキストエディタを使用して以下のキーを<applicationName>.4DProject ファイル内に挿入することで、コードをトークンなしで保存するように設定することができます:
"tokenizedText": false
この設定は、メソッドが保存されるときにのみ考慮されます。 つまり、再保存しない限り、プロジェクト内の既存メソッドはそのまま残されます。
フォーミュラ内でのトークンの使用
テキストベースの4D フォーミュラ とは、入力された時ではなく、実行時に解釈されるテキストのことです。 これは、4D コードが標準テキストとして表現された場合と同じです。具体的には、コードがMETHOD GET CODE and METHOD SET CODE コマンドを使用してエクスポート/インポートされた場合、コピー・ペースト、または4D HTMLタグから解釈されたとき などが該当します。
これらのコンテキストにおいてトークナイゼーション機構を引き続き使用するためには、以下にある、ランゲージ内でオブジェクト名の後にトークンを付けると言う明示的なシンタックスを使用する必要があります。
トークンシンタックス
式の中でトークナイズ可能な名前付き要素に対して、4D はトークンを直接参照するための特別な信託巣を提供しています。要素名の後に型(コマンド、フィールド、など)を指定する特定の接頭辞を追加し、そのあとに参照を追加します。 以下の表にこのトークンシンタックスについての詳細がまとめてあります:
| 機能 | 使用例(標準のシンタックス) | 接尾辞 | 使用例(トークンシンタックス) | コメント |
|---|---|---|---|---|
| 4D コマンド | String(a) | :Cxx | String:C10(a) | xx はコマンド番号です |
| 4D 定数 | Pi | :Kxx:yy | Pi:K30:1 | xx は定数グループのIDで、yy はグループ内でのインデックス(位置)です |
| テーブル | [Employees] | :xx | [Employees:1] | xx はテーブル番号です |
| フィールド | [Employees]Name | :xx | [Employees:1]Name:2 | xx はフィールド番号です |
| 4D プラグイン | PV PRINT(area) | :Pxx:yy | PV PRINT:P13000:229(area) | xx はプラグインIDで、yy はコマンドのインデックスです |
注意: 接頭辞には大文字(C, P)を使用しなければなりません。そうでない場合には正常に解釈されません。
このシンタックスを使用することにより、フォーミュラの名前が変更された場合でも、データベースが異なる言語において実行された場合でも、フォーミュラが正しく解釈される事を保証します。
このシンタックスは、呼び出しコンテキストに関係なく、全ての4D フォーミュラ(または4D 式)において受け入れられます:
- フォーミュラエディター、または
EXECUTE FORMULA,、APPLY TO SELECTION、QUERY BY FORMULA、LISTBOX INSERT COLUMN FORMULAなどのコマンドを使用して実行された4Dフォーミュラ。 - リッチテキストエリア 内に挿入された式(
ST INSERT EXPRESSIONを参照して下さい) - 変換タグ 内で計算された式
- 4D Write Pro エリア などの外部エリア内に挿入された式。
要素番号を調べるためには
トークンシンタックスでは様々な要素の、それぞれの参照番号を必要とします。 これらの参照番号は、要素の型に応じて異なる場所に表示されています。