4D 20 R7では、”Compiler_”メソッドに別れを告げ、変数の宣言方法と宣言場所をより自由にすることができます。直接型指定により開発ワークフローとコーディングプロセスに集中し続けることで、時間を節約することができます。
4Dの以前のバージョンでは、開発者はコンパイル時に変数の型指定を処理するためには2つの方法がありました。”コンパイル・パス”設定が”自動変数定義は行わない”以外に設定されている場合、コンパイラは、型が指定されていない変数の型を、コード内でのその変数の使用に基づいて推測しようとします。これは変数宣言を簡素化できる反面、トレードオフを伴います:
- コンパイルの速度低下:型の類推を行うには、更にコンパイル・パスを追加する必要があり、ビルド・プロセス全体が遅くなることになります。
- エラーのリスク:コンパイラが誤った型を推論する可能性があり、結果としてデバッグが困難なバグを引き起こす可能性があります。
これらの問題を回避するために、開発者は”自動変数定義は行わない”オプションを使用して、厳密な型指定を行うことが推奨されました。しかしそのためには、すべてのプロセス変数とインタープロセス変数を専用の “Compiler_” メソッド内で宣言する必要がありました。
直接型指定の導入
これらの課題に対処するため、コンパイル時の変数の宣言と型付けの方法を簡素化する直接型指定を導入しました。
この直接型指定を使用すると、プロセス変数やインタープロセス変数を宣言するために “Compiler_”メソッドを使用する必要がなくなります。その代わりに、メソッド内、クラス内や、その他の適切なコンテキストであれば、コード内でそれらの変数がコード内で論理的に属する場所であればどこにでも定義できるようになりました。これにより、コードの構成をより自由に制御できるようになり、カプセル化が強化されます。
この変更により、変数の型の安全性と効率的なコンパイルを確保しつつ、コードを好きなように編成できる柔軟性がもたらされます。
プロジェクトで直接型指定を採用する
新規プロジェクトでも既存プロジェクトでも、直接型指定をワークフローに簡単に組み込むことができます。
-
新規プロジェクトでは常に直接型指定が使用されます。つまり、柔軟な変数宣言と優れたコード構成のメリットをすぐに享受できるのです。
-
既存のプロジェクトでは、コンパイル・パスの新しい設定で、直接型指定のオン/オフを切り替えることができます。これにより、古いコードとの互換性が確保され、自分のペースで移行できるようになります。
この設定を有効にするだけで、プロセス変数やインタープロセス変数を、コード内の最も合理的な場所で自由に宣言できるようになります。
直接型指定でできるようになること
今後は #declare構文は、直接型指定でメソッドのパラメーターを宣言する際に必須となりました。これにより、C_TEXT、C_LONGINTなどの従来のコンパイラコマンドは廃止予定となります。主な利点の1つは、特にコンポーネントにおいて、ホスト・ベースをコンパイルする際にコンポーネントをコンパイルする必要がなくなったということです。コンパイラは自動的にメソッド・プロトタイプをコンポーネントのコードから直接取得し、開発プロセスを簡素化・高速化します。
C_TEXT やC_LONGINT のようなコンパイラー・コマンドをvar 宣言構文に変換するのを支援するために、そのための4DマクロをGitHubで公開しています。こちらからアクセスできます: GitHubの4D–マクロ。
どういう仕組みで動くのか?
- コンパイラーは、明示的に型指定されていない変数に遭遇すると、その変数を「型指定予定」変数のリストに追加します。
- コンパイラーは現在のメソッドのコンパイルを一時停止し、他のメソッドのコンパイルを始めます。
- 一時停止する前に、メソッド内のすべての変数定義を収集します。
- すべてのメソッドをコンパイルした後、コンパイラーは「型指定予定」リストの変数がすべて見つかり、型が割り当てられているかどうかをチェックします。
- もし型が割り当てられていれば、一時停止していたメソッドのコンパイルを再開します。
- そうでない場合は、型指定されていない変数を示すエラーが発生します。
結論
直接型指定の導入は、4D における変数宣言の処理方法に大きな改善をもたらします。Compiler_”メソッドの必要性をなくし、変数宣言をコード内で自由に行えるようにしたことで、4D開発者はプロジェクトの構成方法をより柔軟にコントロールできるようになりました。
直接型指定の詳細とプロジェクトへの実装方法については、ドキュメントをご覧ください。