コレクションとコールバックコマンドにおけるフォーミュラの使用

コレクションのメンバー関数がコールバックを必要とする場合に、もっとわかりやすい方法はないかとのご要望を多数いただきました。

この度、このご要望に応えることができました!

4D v19 R6 より、コレクションのメンバー関数に定義するコールバックのほか、EXECUTE METHOD IN SUBFORMCALL FORM および CALL WORKER コマンドにもフォーミュラが受け渡せるようになりました。もし、コードを簡単な式に減らすことができれば、メソッドを使用せずに直接受け渡すこともできます。

HDI: フォーミュラを関数やコマンド内で使う

COLLECTIoN とフォーミュラ

次のメンバー関数でコールバックとしてフォーミュラを使用できるようになりました: .every(), .filter(), .find(), .findIndex(), .map(), .orderByMethod(), .reduce(), .some(), .sort()

たとえば、コレクションで 0 より大きい要素をすべて見つけたい場合、1行でそれをおこなうことができます:

$result:=$c.filter(Formula($1.value>0))

上記のように、よりシンプルで読みやすくするため、$1.result はフォーミュラで省略可能です。

もちろん、次のようなコードを使用することもできます:

$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter("NumberGreaterThan0")

しかし、フォーミュラを使ってメソッドを参照することで、コード補完機能を活用してメソッド名を見つけられるほか、メソッド名を変更した場合にコード内の参照箇所を自動変更してくれる機能を利用することができます:

$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter(Formula(NumberGreaterThan0))

この場合、NumberGreaterThan0 メソッドは下のように書けます:

#DECLARE ($param:Object)
$param.result:=$param.value>0

コマンドとフォーミュラ

EXECUTE METHOD IN SUBFORMCALL FORM および CALL WORKER コマンドのコールバックを定義するのにもフォーミュラを使用できます。

コレクションの場合と同様に、メソッドを作成しなくてもフォーミュラは利用可能です:

// フォームのコンテキスト内のウィンドウを閉じます
CALL FORM($windows;formula(CANCEL))

または、次のいずれかの方法でメソッドを参照します:

EXECUTE METHOD IN SUBFORM("Subform"; Formula(UpdateField))

あるいは

EXECUTE METHOD IN SUBFORM("Subform"; "UpdateField")

これらの新機能を HDI で試してみてください。

フィードバックはぜひフォーラムにお寄せください。

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。