Function
Un objet 4D.Function contient un morceau de code qui peut être exécuté à partir d'un objet, soit en utilisant l'opérateur (), soit en utilisant les fonctions apply() et call().
Héritage
4D gère plusieurs types d'objets Function, héritant de la classe 4D.Function :
- les fonctions natives, c'est-à-dire des fonctions intégrées de diverses classes 4D telles que
collection.sort()oufile.copyTo(). - les fonctions utilisateur, créées dans les classes utilisateur à l'aide du mot-clé Function.
- les fonctions de formule, c'est-à-dire des fonctions qui peuvent exécuter un code de formule stocké dans des objets 4D.Formula,
- les fonctions de méthode, c'est-à-dire des fonctions qui peuvent exécuter du code source sous forme de texte stocké dans des objets 4D.Method.
Exécution du code dans les objets Function
Les objets Function peuvent être encapsulés dans des propriétés d'objet :
var $message : 4D.Formula
$message:=Formula(ALERT("Hello world"))
$f:={message: $message}
Cette propriété est une "fonction objet", c'est-à-dire une fonction qui est liée à son objet parent. Pour exécuter une fonction stockée dans une propriété objet, utilisez l'opérateur () après le nom de la propriété, comme par exemple :
$f.message() //affiche"Hello world"
La syntaxe avec des crochets est également prise en charge :
$f["message"]() //affiche "Hello world"
A noter que, même si elle n'a pas de paramètres (voir ci-dessous), une fonction objet à exécuter doit être appelée avec des parenthèses (). Appeler uniquement la propriété retournera une nouvelle référence à la formule (elle ne sera pas exécutée) :
$o:=$f.message //retourne l'objet fonction en $o
Vous pouvez également exécuter une fonction en utilisant les fonctions apply() et call() :
$message.apply() //affiche "Hello world"
Sommaire
| .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.
.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.Function
$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.Function
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"