Cuando se utilizan colecciones con un método miembro que necesita un método de devolución de llamada, muchos de ustedes nos han pedido una forma más directa.
Nos lo habéis pedido y os lo hemos dado.
A partir de 4D v19 R6, 4D le permite utilizar una fórmula para definir un callback en las funciones miembro de la colección, el EXECUTE METHOD IN SUBFORM, CALL FORM, y CALL WORKER comandos. Si puede reducir su código a una simple expresión, puede pasarla directamente a la fórmula sin usar un método.
Fórmula de HDI en los comandos
fórmula en COLECCIÓN
Ahora puede utilizar la fórmula como devolución de llamada en los métodos de los miembros: .every(), .filter(), .find(), .findIndex(), .map(), .orderByMethod(), .reduce(), .some(), .sort()
Por ejemplo, si quieres filtrar la colección para encontrar todos los miembros mayores que 0, puedes hacerlo en una línea:
$result:=$c.filter(Formula($1.value>0))
Como puede ver arriba, para ser más sencillo y legible, hacemos que el $1.resultado sea opcional en las fórmulas.
Por supuesto, siempre puedes usar el código
$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter("NumberGreaterThan0")
pero también puedes usar la fórmula para referirte a un método y así beneficiarte del completado de código para encontrar el nombre de tu método, y aprovechar el renombrado automático si cambias el nombre de tu método:
$c:=New collection
$c.push(1;-5; -3; -1;3; -4; -6; -2;10)
$result:=$c.filter(Formula(NumberGreaterThan0))
con el método NumberGreaterThan0:
#DECLARE ($param:Object)
$param.result:=$param.value>0
fórmula en los comandos
Puede utilizar una fórmula para definir una llamada de retorno en los métodos EXECUTE METHOD IN SUBFORM, CALL FORMy CALL WORKER comandos.
En cuanto a las colecciones, puedes utilizar expresiones sin tener que crear un método
// Close the windows in the context of the form
CALL FORM($windows;formula(CANCEL))
o referirse a un método con una de estas 2 formas
EXECUTE METHOD IN SUBFORM("Subform"; Formula(UpdateField))
o
EXECUTE METHOD IN SUBFORM("Subform"; "UpdateField")
Pruebe todas estas novedades con el IDH anterior y no dude en dar su opinión en el foro.