UDF structureColdFusion compte plus de 250 fonctions dans sa langue. Il a string-fonctions de manipulation, les fonctions réseau, les fonctions de structure et de nombreux autres types de fonctions. Même avec cette grande variété de fonctions, mais parfois vous mai souhaitez définir votre propre fonction qui fait des choses que les fonctions intégrées de ColdFusion peuvent pas. Cet article ne décrit pas comment utiliser cfscript seule façon d'utiliser cfscript en liaison avec fonctions définies par l'utilisateur. Une fonction définie par l'utilisateur, ou UDF, ne peut être construit dans cfscript, CFML, ou une combinaison des deux. Les parties suivantes décrivent la façon de construire les UDF en utilisant cfscript. UDF cfscript sont très naturels, parce qu'ils imitent de création de fonctions en JavaScript, Java, et de nombreux autres langages de programmation que vous avez mai-être déjà familier. En général, les fonctions de recevoir un ou plusieurs arguments et retourner un résultat unique. Certaines fonctions (comme ColdFusion fonction Now ()) ne prennent pas des arguments, mais presque toutes les fonctions ne retournent un résultat. Une UDF base construite à l'aide cfscript se présente comme suit:
Les quatre seules choses requises pour chaque fonction sont les mot clé de fonction, le nom de la fonction, les parenthèses après le nom, et les accolades autour du corps de la fonction. Bien que l'instruction return est techniquement optionnelles, le retour est ce qui rend une fonction vraiment utile, que cette déclaration représente le résultat renvoyé au code qui appelle la fonction. Nous appelons la fonction que nous venons de créer comme nous le ferions aucune fonction intégrée ColdFusion, comme suit:
Nous pouvons élargir mes fonctions en définissant une variable locale, comme suit: getCurrentTime fonction () (var = szTime TimeFormat (Now (), "h: mm: ss tt"); retour szTime;) Plus d'informations sur le mot clé var dans la partie suivante. Nous pouvons également ajouter le code de notre fonction entre la déclaration de variable et de la déclaration de retour, comme suit: getCurrentTime fonction () (var = szTime TimeFormat (Now (), "h: mm: ss tt"); szTime = ReplaceNoCase (szTime, "AM", "le matin"); szTime = ReplaceNoCase (szTime, "pm" , "le soir"); retour szTime;) Ce UDF est un exemple très simple qui ne prend pas d'arguments. Maintenant, pour jeter un oeil dans le Var plus en détail. var déclare une variable qui est locale à une fonction. Si nous n'avons pas utilisé var, par exemple, nous pourrions faire ce qui suit:
Après l'appel myFn (), myVar est disponible pour du code en dehors de la fonction. C'est parce que toute variable définie à l'intérieur cfscript est également disponible pour CFML. Il s'agit d'une programmation très peu soignée, car vous pourriez être de créer par inadvertance ou d'écraser les variables que vous aviez l'intention de ne pas affecter. Afin de garder locales maVar à myFn () telle qu'elle ne puisse pas fuir hors de la fonction, var utilisation, comme suit:
Maintenant, essayez d'utiliser myFn extérieur myvar () renvoie une erreur, ce qui est exactement ce que vous voulez qu'il fasse. Toutes les variables créées à l'aide var doit être initialisé; ColdFusion renvoie une erreur si elles ne sont pas. Et remarquez aussi que vous ne pouvez pas placer le mot-clé var ailleurs que tout en haut d'une déclaration de fonction. Fonctions retournent une valeur unique, comme le montre l'exemple suivant: myFn fonction () (return TimeFormat (Now (), "h: mm: ss tt«);) Dès que cfscript rencontre une instruction return, ColdFusion s'arrêter d'exécuter la fonction et renvoie la valeur suivante du mot clé retour au code appelant. Vous pouvez également retourner conditionnellement valeurs différentes en fonction des circonstances différentes, comme dans le code suivant: myFn fonction () (if (IsDefined ( "Client.myVar")) (return Client.myVar;) else (return TimeFormat (Now (), "h: mm: ss tt");)) Chaque chemin de contrôle dans une fonction doit retourner une valeur ou si vous obtenez des résultats incohérents. Une bonne pratique consiste donc à définir une valeur de retour par défaut et utiliser une seule instruction de retour dans votre déclaration de fonction, comme suit: myFn fonction () (var result = TimeFormat (Now (), "h: mm: ss tt"); if (IsDefined ( "Client.myVar")) (result = Client.myVar;) return result;) La plupart des fonctions prendre une ou plusieurs arguments, comme le montre l'exemple suivant:
Les noms des arguments sont définis dans une liste à l'intérieur des parenthèses après la déclaration de fonction. Vous voyez des utilisations plus avancées de l'argumentation plus loin dans cet article. L'exemple précédent utilisé des arguments de position, ce qui signifie que le premier argument dans l'appel de fonction a été adoptée pour le premier argument dans la fonction, le second dans l'appel est devenu le deuxième dans la fonction, et ainsi de suite. Vous pouvez également nommer les arguments dans l'appel si vous voulez les faire passer dans un ordre différent, comme suit:
Cette syntaxe n'est pas largement utilisée car elle est légèrement plus difficile à lire, il peut vous aider, cependant, si vous ne vous rappelez pas l'ordre des paramètres d'une fonction. Si l'un des arguments d'un appel de fonction sont nommés, toutefois, tous les arguments doivent être nommés. Les fonctions peuvent être appelé n'importe où dans un modèle de ColdFusion, même au sein d'une autre fonction ColdFusion. Prenons l'exemple suivant:
Une fonction peut également lui-même appel. Nous avons écrit la fonction suivante, par exemple, pour calculer la factorielle d'un nombre (une factorielle sera défini dans un instant):
La factorielle de 6, par exemple, est de 6 x 5 x 4 x 3 x 2 x 1, ou 720. Pour calculer la factorielle, on retourne le nombre passé à la fonction, multiplié par le prochain plus petite factorielle (parce que les 6 factoriel peut aussi être représenté que 6 x 5 factorielle). Vous devez être prudent dans la création de fonctions récursives pour vous assurer que vous avez un état d'arrêt. Dans notre cas, nous nous arrêtons la récursivité lorsque monNum est 1. Si vous ne construisez pas une condition d'arrêt dans votre logique, vous a mis la demande dans une boucle infinie. Nous vous montrons que les structures sont accessibles par référence, alors que d'autres variables sont référencées par valeur. La même chose s'applique au passage de variables à une fonction. Si vous passez un numéro à une fonction, la fonction a une copie locale de ce nombre, ainsi que les modifications que les fonctions rend le nombre ne sont pas répétées en dehors de l'appel de fonction. Structures sont passés à une fonction par référence, toutefois, de sorte que toute modification que la fonction apporte à la structure de paramètres peuvent être visionnés en dehors de l'appel de fonction. un article présenté par Nina Lachey Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite. Important: Cet article "UDF" structure a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.
|
|||||
| Online: 452 users browsing the articles directory |
|
|