Quando si usano le collezioni con un metodo membro che necessita di un metodo di callback, molti di voi ci hanno chiesto un modo più semplice.
L’avete chiesto e noi l’abbiamo fatto!
A partire da 4D v19 R6, 4D consente di utilizzare una formula per definire un callback nelle funzioni membro di una collezione, le funzioni EXECUTE METHOD IN SUBFORM, CALL FORM, e CALL WORKER . Se si riesce a ridurre il codice a una semplice espressione, è possibile passarlo direttamente nella formula senza utilizzare un metodo.
formula in COLLECTIoN
È ora possibile utilizzare la formula come callback nei metodi dei membri: .every(), .filter(), .find(), .findIndex(), .map(), .orderByMethod(), .reduce(), .some(), .sort()
Ad esempio, se si vuole filtrare l’insieme per trovare tutti i membri maggiori di 0, è possibile farlo su una riga:
$result:=$c.filter(Formula($1.value>0))
Come si può vedere qui sopra, per essere più semplici e leggibili, abbiamo reso facoltativo il valore $1.result nelle formule.
Naturalmente, è sempre possibile utilizzare il codice:
$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter("NumberGreaterThan0")
ma potete usare anche le formule per riferirvi a un metodo e così beneficiare del completamento del codice per trovare il nome del metodo e sfruttare la ridenominazione automatica se cambiate il nome del metodo:
$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter(Formula(NumberGreaterThan0))
con il metodo NumberGreaterThan0:
#DECLARE ($param:Object)
$param.result:=$param.value>0
formula nei comandi
È possibile utilizzare una formula per definire un callback nei metodi EXECUTE METHOD IN SUBFORM, CALL FORM, e CALL WORKER .
Come per le collezioni, è possibile utilizzare le espressioni senza dover creare un metodo:
// Close the windows in the context of the form
CALL FORM($windows;formula(CANCEL))
oppure riferirsi a un metodo in uno dei due modi seguenti:
EXECUTE METHOD IN SUBFORM("Subform"; Formula(UpdateField))
oppure
EXECUTE METHOD IN SUBFORM("Subform"; "UpdateField")
Provate tutte queste nuove funzionalità con l’HDI qui sopra e non esitate a dare il vostro feedback sul forum!