Aller au contenu principal
Version : Suivant

Formula

Les objets 4D.Formula sont créés par les commandes Formula ou Formula from string et vous permettent d'exécuter n'importe quelle expression ou code 4D exprimé sous forme de texte d'une seule ligne.

Les objets de la classe 4D.Formula héritent de la classe 4D.Function. Ainsi, pour exécuter la formule, vous pouvez :

  • placer un objet 4D.Formula dans une propriété d'objet et utiliser l'opérateur () après le nom de la propriété,
  • ou appeler directement l'objet 4D.Formula en utilisant la fonction call() ou apply() sur lui.

Voir les exemples dans le paragraphe Exécution du code dans les objets Function.

Passer des paramètres aux formules

Vous pouvez passer des paramètres à vos formules en utilisant une syntaxe séquentielle basée sur $1, $2,...,$n. La numérotation des paramètres $ représente l'ordre dans lequel ils seront passés à la formule. Par exemple, vous pouvez écrire :

 $f:={message: Formula(ALERT("Hello "+$2+", "+$1))}
$f.message("John";"Smith") //affiche "Hello Smith, John"

Ou en utilisant la fonction .call() :

 var $f : 4D.Formula
$f:=Formula($1+" "+$2)
$text:=$f.call(Null;"Hello";"World") //retourne "Hello World"
$text:=$f.call(Null;"Welcome to";String(Year of(Current date))) //retourne "Welcome to 2026" (par exemple)

Paramètres d'une seule méthode

Pour plus de commodité, lorsque la formule est constituée d'une seule méthode projet, les paramètres peuvent être omis dans l'initialisation de l'objet formule. Ils peuvent simplement être passés lorsque la formule est appelée. Par exemple :

 var $f : 4D.Formula

$f:=Formula(myMethod)
//Ecrire Formula(myMethod($1;$2)) n'est pas nécessaire
$text:=$f.call(Null;"Hello";"World") //retourne "Hello World"
$text:=$f.call() //retourne "How are you?"

//myMethod
#DECLARE ($param1 : Text; $param2 : Text)->$return : Text
If(Count parameters=2)
$return:=$param1+" "+$param2
Else
$return:="How are you?"
End if

Les paramètres sont reçus dans la méthode, dans l'ordre où ils sont spécifiés dans l'appel.

Objet formule

.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any

exécute l'objet fonction auquel elle est appliquée, en passant les paramètres sous forme de collection, et renvoie la valeur résultante
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

exécute l'objet fonction auquel elle est appliquée, avec un ou plusieurs paramètre(s) passé(s) directement, et renvoie la valeur résultante
.source : Text
contient le code source de la fonction sous forme de texte

.apply()

Historique
ReleaseModifications
21 R3Prise en charge des objets 4D.Method
17 R3Ajout

.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any

ParamètresTypeDescription
thisObjObject->Objet à retourner par la commande This dans la fonction
paramsCollection->Collection de valeurs à passer en paramètres à la fonction
Résultatany<-Valeur retournée par l'exécution de la fonction

Description

La fonction .apply() exécute l'objet fonction auquel elle est appliquée, en passant les paramètres sous forme de collection, et renvoie la valeur résultante.

Dans le paramètre thisObj, vous pouvez passer une référence à l'objet qui sera utilisé comme This dans la fonction. Passez Null si vous ne voulez pas utiliser This mais que vous voulez envoyer des paramètres.

Vous pouvez passer une collection à utiliser comme paramètres dans la fonction en utilisant le paramètre facultatif params :

  • dans les objets 4D.Formula, les paramètres sont passés à $1...$n dans la formule.
  • dans les autres objets 4D.Function tels que les objets 4D.Method, les paramètres sont passés aux paramètres déclarés.

Notez que .apply() est similaire à .call() à la différence près que les paramètres sont passés en tant que collection. Cela peut être utile pour passer des résultats calculés.

Exemple 1

 var $f : 4D.Formula
$f:=Formula($1+$2+$3)

$c:=New collection(10;20;30)
$result:=$f.apply(Null;$c) // retourne 60

Exemple 2

 var $calc : 4D.Formula
var $feta; $robot : Object
$robot:=New object("name";"Robot";"price";543;"quantity";2)
$feta:=New object("name";"Feta";"price";12.5;"quantity";5)

$calc:=Formula(This.total:=This.price*This.quantity)

$calc.apply($feta) // $feta={name:Feta,price:12.5,quantity:5,total:62.5}
$calc.apply($robot) // $robot={name:Robot,price:543,quantity:2,total:1086}

.call()

Historique
ReleaseModifications
21 R3Prise en charge des objets 4D.Method
17 R3Ajout

.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

ParamètresTypeDescription
thisObjObject->Objet à retourner par la commande This dans la fonction
paramsany->Valeurs à passer en paramètres à la fonction
Résultatany<-Valeur retournée par l'exécution de la fonction

Description

La fonction .call() exécute l'objet fonction auquel elle est appliquée, avec un ou plusieurs paramètre(s) passé(s) directement, et renvoie la valeur résultante.

Dans le paramètre thisObj, vous pouvez passer une référence à l'objet qui sera utilisé comme This dans la fonction.

Vous pouvez passer des valeurs à utiliser comme paramètres dans la fonction à l'aide du paramètre facultatif params :

  • dans les objets 4D.Formula, les paramètres sont passés à $1...$n dans la formule.
  • dans les autres objets 4D.Function tels que les objets 4D.Method, les paramètres sont passés aux paramètres déclarés.

Notez que .call() est similaire à .apply() à la différence près que les paramètres sont passés directement.

Exemple 1

 var $f : 4D.Formula
$f:=Formula(Uppercase($1))
$result:=$f.call(Null;"hello") // retourne "HELLO"

Exemple 2

 $o:=New object("value";50)
$f:=Formula(This.value*2)
$result:=$f.call($o) // retourne 100

.source

Historique
ReleaseModifications
21 R3Prise en charge des objets 4D.Method
18 R2Ajout

.source : Text

Description

La propriété .source contient le code source de la fonction sous forme de texte.

La valeur renvoyée est le texte original utilisé pour créer l'objet 4D.Formula ou 4D.Method, mais reformaté.

Cette propriété est en lecture seule.

Exemple

 var $of : 4D.Formula
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"