Aller au contenu principal
Version : Suivant

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() ou file.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
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.

.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.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
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.Function
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"