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.Formuladans une propriété d'objet et utiliser l'opérateur()après le nom de la propriété, - ou appeler directement l'objet
4D.Formulaen utilisant la fonctioncall()ouapply()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
| Release | Modifications |
|---|---|
| 21 R3 | Prise en charge des objets 4D.Method |
| 17 R3 | Ajout |
.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| thisObj | Object | -> | Objet à retourner par la commande This dans la fonction |
| params | Collection | -> | Collection de valeurs à passer en paramètres à la fonction |
| Résultat | any | <- | 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.Functiontels que les objets4D.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
| Release | Modifications |
|---|---|
| 21 R3 | Prise en charge des objets 4D.Method |
| 17 R3 | Ajout |
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| thisObj | Object | -> | Objet à retourner par la commande This dans la fonction |
| params | any | -> | Valeurs à passer en paramètres à la fonction |
| Résultat | any | <- | 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.Functiontels que les objets4D.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
| Release | Modifications |
|---|---|
| 21 R3 | Prise en charge des objets 4D.Method |
| 18 R2 | Ajout |
.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)"