メソッド
メソッドとは、1つ以上の動作を実行するコードのことです。 メソッドは、1つ以上のステートメントで構成されます。
ステートメントは 1つの命令を実行し、単純な場合もあれば複雑な場合もあります。 ステートメントとは通常、メソッドの 1行のことを指します (必要に応じて \
文字を使って行を分割 することがで きます。
メソッドは最大 2GBのテキストまたは、32000行まで記述できます。
メソッドタイプ
4D ランゲージにおいて、数種類のメソッドが存在します。 その呼び出し方によって、メソッドは区別されます:
タイプ | 自動呼び出しのコンテキスト | 引数の受け取り | 説明 |
---|---|---|---|
プロジェクトメソッド | 呼び出しに応じて (プロジェクトメソッドの呼び出し 参照) | ◯ | 任意のアクションを実行するためのコードです。 作成されたプロジェクトメソッドは、そのプロジェクトのランゲージの一部となります。 |
オブジェクト (ウィジェット) メソッド | メソッドが設定されたフォームオブジェクトに関連したイベント発生時に | × | フォームオブジェクト (ウィジェットとも呼びます) のプロパティです。 |
フォームメソッド | メソッドが設定されたフォームに関連したイベント発生時に | × | フォームのプロパティです。 フォームメソッドを使用してデータとオブジェクトを管理することができます。ただし、これら目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。 |
トリガー (別名 テーブルメソッド) | テーブルのレコード 操作 (追加・削除・修正) の度に | × | テーブルのプロパティです。 トリガーは、データベースのレコードに対して「不正な」操作がおこなわれることを防ぎます。 |
データベースメソッド | 作業セッションのイベント発生時に | ○ (既定) | 4D には 16のデータベースメソッドがあります。 |
クラス | クラス関数 は、オブジェクトインスタンスのコンテキストにおいて呼び出されます。 | ◯ | クラス関数にはビルトインのものと (例: collection.orderBy() や entity.save() )、開発者によって作成されるものがあります。 クラス 参照。 |
プロジェクトメソッドの呼び出し
その実行方法や使用方法に応じて、プロジェクトメソッドは次のような役割を果たします:
- サブルーチン
- オブジェクトフォーミュラ
- メニューメソッド
- プロセスメソッド
- イベントまたはエラー処理メソッド
また、テスト目的などで、プロジェクトメソッドを手動で実行することもできます。
サブルーチン
サブルーチンは、処理の下請け的なプロジェクトメソッドです。 他のメソッドから呼ばれて、要求された処理を実行します。 関数は、呼び出し元のメソッドに値を返すサブルーチンのことです。
プロジェクトメソッドを作成すると、それは同データベースのランゲージの一部となります。 プロジェクトメソッドは、4Dのビルトインコマンドと同様に、ほかのメソッド (プロジェクトメソッドやオブジェクトメソッド) から呼び出すことができます。 このように使用されるプロジェクトメソッドをサブルーチンと呼びます。
サブルーチンは、以下のような目的で使います:
- 重複コードの削減
- メソッドの役割の明確化
- メソッド改変の容易化
- コードのモジュール化
たとえば、顧客データベースがあるとします。 プロジェクトをカスタマイズしていくうちに、顧客を検索してレコードを修正するという一連の作業を繰り返しおこなっていることに気づいたとします。 そのコーディングは以下のようになっています:
// 顧客を検索します
QUERY BY EXAMPLE([Customers])
// 入力フォームを選択します
FORM SET INPUT([Customers];"Data Entry")
// 顧客レコードを修正します
MODIFY RECORD([Customers])
サブルーチンを使用しなければ、顧客レコード修正のたびにコードを作成しなければなりません。 プロジェクトの 10箇所で同じ処理が必要であれば、同じコーディングを 10回も書かねばなりません。 サブルーチンを使用すれば 1回コーディングするだけですみます。 これがコーディングの重複を減らすというサブルーチンの第一の利点です。
先ほど説明したコードが MODIFY_CUSTOMER
と呼ばれるメソッドであるとすれば、他のメソッド内でそのメソッド名を使うことで実行できます。 たとえば、顧客のレコードを修正し、それからレコードをプリントするために、以下のようなメソッドを書くことができます:
MODIFY_CUSTOMER
PRINT SELECTION([Customers])
この機能はメソッドを劇的にに簡素化します。 さきほどの例で言えば、MODIFY_CUSTOMER
メソッドがどのように動作するかは知る必要がなく、何をおこなうかだけ知っていればよいのです。 これはメソッドをサブルーチン化することの2番目の理由、役割の明確化です。 このように、作成されたメソッドは 4Dランゲージを拡張します。
このプロジェクトの例で顧客の検索方法を変える場合、10箇所ではなく、たった1つのメソッドを変更するだけですみます。 これがサブルーチンを使うもう一つの理由、改変の容易化です。
また、サブルーチンの利用はコードをモジュール化します。 これはコードをモジュール (サブルーチン) に分割することを意味し、それぞれは論理的な処理を実行します。 小切手振り出し口座のプロジェクトから、以下のコードを見てみましょう:
FIND_CLEARED_CHECKS // 決済された小切手の検索
RECONCILE_ACCOUNT // 口座の照合
PRINT_CHECK_BOOK_REPORT // レポートの印刷
プロジェクトの詳細を知らない人でも、このプログラムが何をしているかはわかります。 各サブルーチンの処理手順を知る必要はありません。 各サブルーチンは長く、複雑な処理で構成されていることもありますが、それらが何を実行するのかだけを知っていれば十分なのです。 プログラムを論理的な処理単位やモジュールにできるだけ分割することをお勧めします。