コマンド、演算子、および言語の他の部分を動作させるためにメソッドがあります。メソッドにはいくつかの種類があり、オブジェクトメソッド、フォームメソッド、テーブルメソッド(トリガ)、プロジェクトメソッド、データベースメソッドがあります。この章では、すべてのタイプのメソッドに共通の機能を説明します。
メソッドは、ステートメントで構成されます。ステートメントとは、メソッドの1行のことで1つの命令を実行します。ステートメントは単純な場合もあれば、複雑な場合もあります。ステートメントは常に1行ですが最大32,000文字まで使用することができます。これは、ほとんどの処理で十分な長さです。
例えば、以下の行は[People]テーブルに新しいレコードを追加するステートメントです。
ADD RECORD([People])
メソッドは、テストとループの制御フローの実行を含みます。制御フローに関する詳細は、の節を参照してください。
注:メソッドは最大2GBのテキストまたは、32000行まで記述できます。これらの限界を越えた場合、これ以上行を追加できないというアラートボックスが表示されます。
4Dのメソッドには、以下の5種類があります。
- オブジェクトメソッド:オブジェクトメソッドとは、オブジェクトのプロパティとして記述される短いメソッドのことです。一般に、オブジェクトメソッドはそのフォームが表示または印刷されているときにオブジェクトを管理します。ユーザがオブジェクトメソッドを呼び出すことはありません。オブジェクトメソッドが属しているオブジェクトをイベントが含んでいる場合に、4Dがオブジェクトメソッドを自動的に呼び出します。
- フォームメソッド:フォームメソッドとは、フォームのプロパティです。ユーザはフォームメソッドを使用してデータとオブジェクトの管理を実行することができます。ただし、上述の目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。ユーザがフォームメソッドを呼び出すことはありません。
フォームメソッドが属しているフォームをイベントが含んでいる場合に、4Dがフォームメソッドを自動的に呼び出します。
オブジェクトメソッドとフォームメソッドの詳細に関しては、Form eventの節や4D Design Referenceを参照してください。
- トリガ:トリガとは、テーブルのプロパティです。ユーザがトリガを呼び出すことはありません。ユーザがテーブル(追加、削除、修正)のレコードを操作する度にトリガは4Dデータベースエンジンによって自動的に呼び出されます。トリガはユーザのデータベースのレコードに対して「不正な」操作が行われることを防ぎます。例えば、「送り状」システムでは、送り状を送付した顧客名を明記せずに第三者が送り状を追加することを防ぎます。トリガはとても強力なツールで、テーブル上の操作の制限を実行できます。
同様に、思いがけないデータの損失や不正な変更も防ぐことができます。ユーザは簡単なトリガを作成し、それを徐々に洗練されたものにしてゆくことができます。
トリガについての詳細は、トリガの章を参照してください。
- プロジェクトメソッド:オブジェクトメソッド、フォームメソッド、トリガはすべて特定のオブジェクト、フォーム、テーブルとそれぞれ関連があります。これとは異なり、プロジェクトメソッドはユーザのデータベースを通して使用可能となります。
プロジェクトメソッドは再利用でき、他のメソッドによる使用が可能です。作業の反復が必要になった場合でも、状況ごとに同じメソッドを書く必要はありません。必要に応じていつでもプロジェクトメソッドを他のプロジェクトメソッド、フォームオブジェクト、フォームメソッドから呼び出すことができます。
呼び出されたプロジェクトメソッドは、その処理を終えると、自分を呼び出した元の場所へと制御を戻します。他のメソッドから呼び出されたプロジェクトメソッドはしばしば「サブルーチン」と呼ばれます。結果を返すプロジェクトメソッドは、関数とも呼ばれます。
プロジェクトメソッドには、メニューと関連付けるというもう1つの使用方法があります。開発者がプロジェクトメソッドをメニューに関連付けると、そのメニューが選択されたときにそのメソッドが実行されるようになります。これでメニューをプロジェクトメソッドの呼び出しと同じように考えることができます。
プロジェクトメソッドに関する詳細は、プロジェクトメソッドの節を参照してください。
- データベースメソッド:フォーム内でイベントが生じるときにオブジェクトとフォームのメソッドが呼び出されるのと同様に、作業セッションのイベントが生じると呼び出されるデータベースと連結するメソッドがあります。これが、データベースメソッドです。例えば、ユーザがデータベースを開くたびに、作業セッション中に使用する変数をいくつか初期化したいとします。このために、ユーザはOn Startupデータベースメソッド を使用します。これはユーザがデータベースを開くときに、4Dによって自動的に実行されます。
データベースメソッド関する詳細は、データベースメソッドの節を参照してください。
メソッドは先頭の行から始まり、最後の行に到達するまで、各ステートメント(命令文)を実行します。以下にプロジェクトメソッドの例を示します。
QUERY([People])
If(OK=1)
If(Records in selection([People])=0)
ADD RECORD([People])
End if
End if
まず、プログラミング言語の用語と機能を説明することにします。上記の各行をステートメントまたはコードと呼びます。プログラミング言語を使用して作成したものを、単にコードとも呼びます。4Dは、コードで指定した処理を実行します。
それでは、最初の行を詳しく見てみましょう。
QUERY([People])
この行の最初の要素であるQUERY は、コマンドです。コマンドは4Dのプログラミング言語の一部で、処理を実行します。QUERY コマンドは「クエリ」エディタを表示します。「ユーザ」モードの「レコード」メニューから「クエリ」→「検索」を選択することと同じ機能です。
この行の2番目の要素である括弧は、QUERY コマンドに対する引数(パラメータ)を指定します。引数は、コマンドが処理を実行するために必要なものです。この例では、[People]はテーブル名です。テーブル名は常に角カッコ([...])の中で指定します。つまり、PeopleテーブルがQUERY コマンドの引数であるということを意味します。コマンドの中には複数の引数を持つものもあります。
3番目の要素は、行の終りに指定されたコメントです。コメントは逆アポストロフィ(` )によって示します。開発者やコードを解析する人にこのコードが何を行っているのかを説明します。またコメント記号に続く内容は、コードを実行する時点で無視されます。
コメントはそれ自体で1つの行になりますが、通常は上記の例で示すようにコードの右側に記述します。コメントを使用することにより、メソッドの内容を読みやすく、理解しやすいものにします。
注:コメントは32000文字まで記述できます。
以下の行は、レコードが見つかったかどうかを調べます。
If(Records in selection([People])=0)
Ifステートメントはフロー制御文です。If文はテストを行い、結果がTrueであれば次の行を実行します。Records in selection は関数です。これは値を返すコマンドです。ここでは、Records in selection 関数は引数として渡されたテーブルのカレントセレクションのレコード数を返します。
注:関数名の頭文字だけが大文字になっていることに注意してください。これは、4Dの関数に対する命名規則によるものです。
既に、カレントセレクションとは何かについて説明しました。これは、その時点で作業対象となっているレコードの集まりのことです。レコードの数が0件の場合(レコードが全く見つからない場合)に以下の行を実行します。
ADD RECORD([People])
ADD RECORD コマンドは入力フォームを表示し、新しいレコードを追加します。この行はインデントされています。4Dは、自動的にコードをフォーマットします。この行は、先ほどのフロー制御ステートメント(If)に従属することを示すためにインデントされています。
End if
End if 文はIf 文の制御セクションを終了します。フロー制御ステートメントを使用した場合は、常に制御が終了する場所を示す対応ステートメントを指定する必要があります。
この節の概念をしっかりと把握し、理解してください。