La estructura de UDF

ColdFusion tiene más de 250 funciones en su lengua. Tiene funciones de manipulación de cadenas, las funciones de matriz, las funciones de la estructura, y muchos otros tipos de funciones. Incluso con esta amplia variedad de funciones, sin embargo en ocasiones se desea definir su propia función que hace cosas que la función incorporada en ColdFusion no. Este artículo no se describe cómo utilizar CFSCRIPT sólo de cómo utilizar CFSCRIPT en relación con el definidas por el usuario funciones. Una función definida por el usuario, o UDF, se puede construir en CFSCRIPT, CFML, o una combinación de los dos. Las partes siguientes se describe cómo crear UDF utilizando CFSCRIPT. UDF de CFSCRIPT son muy natural, ya que imitan la creación de rutinas en JavaScript, Java y muchos otros lenguajes de programación que puede que ya se conoce. En general, las funciones de recibir uno o más argumentos y devuelven un resultado único. Algunas funciones (tales como ColdFusion función Now ()) no tienen argumentos, pero casi todas las funciones no devuelven un resultado. Un UDF básica construida mediante CFSCRIPT es como sigue:

 función GetCurrentTime () (return TimeFormat (Now (), "h: mm: ss tt");) 
  

Las únicas cuatro cosas requeridas para cada función son la clave de función, el nombre de la función, el paréntesis después del nombre, y las llaves de todo el cuerpo de la función. Aunque la declaración de retorno es técnicamente opcional, el rendimiento es lo que hace una función realmente útil, ya que esta declaración representa el resultado devuelto al código que llama a la función. Nos llama a la función que acabamos de crear como lo sería cualquier función integrada de ColdFusion, como sigue:

 # GetCurrentTime () # 

Podemos ampliar mis funciones mediante la definición de una variable local, como sigue:

función GetCurrentTime () (var = szTime TimeFormat (Now (), "h: mm: ss tt"); regreso szTime;)

Más información en la palabra clave var en la parte siguiente. También puede agregar código a nuestra función entre la declaración de variables y la instrucción de retorno, como sigue:

función GetCurrentTime () (var = szTime TimeFormat (Now (), "h: mm: ss tt"); szTime = ReplaceNoCase (szTime, "AM", "en la mañana"); szTime = ReplaceNoCase (szTime, "pm" ", en la noche"); regreso szTime;)

Esta UDF es un ejemplo muy simple que no tiene ningún argumento. Ahora bien, para echar un vistazo a var con más detalle. var declara una variable que es local a una función. Si no usamos var, por ejemplo, podríamos hacer lo siguiente:

 myFn function () (myvar = 1; return TRUE;)  # myFn () # # # myVar 

Después de llamar myFn (), myVar está disponible para el código fuera de la función. Esto es debido a cualquier variable definida dentro de CFSCRIPT también está disponible para CFML. Esta es la programación muy descuidada, ya que podría crear involuntariamente o sobrescribir variables que no tengan la intención de afectar. Para mantener a los locales myVar myFn () tal que no puede filtrarse fuera de la función, var uso, como sigue:

 myFn function () (var myVar = 1; return TRUE;) 

Ahora, intenta utilizar myFn fuera myVar () lanza un error, que es exactamente lo que usted quiere que haga. Todas las variables creadas mediante el uso de var debe ser inicializado, ColdFusion arroja un error si no lo son. Y aviso, también, que usted no puede poner la palabra clave var en otro lugar que en la parte superior de una declaración de función. Funciones devuelven un valor único, como muestra el siguiente ejemplo:

myFn function () (return TimeFormat (Now (), "h: mm: ss tt");)

Tan pronto como CFSCRIPT encuentra una instrucción de retorno, ColdFusion deja de ejecutar la función y devuelve el valor a raíz de la palabra clave volver al código de llamada. También puede retornar condicionalmente diferentes valores sobre la base de circunstancias diferentes, como en el siguiente código:

myFn function () (if (IsDefined ( "Client.myVar")) (return Client.myVar;) else (return TimeFormat (Now (), "h: mm: ss tt");))

Cada ruta de acceso de control en una función debe devolver un valor o de obtener resultados incoherentes. Una buena práctica, por lo tanto, es definir un valor por defecto y utilizar sólo una instrucción de retorno en su declaración de la función, como sigue:

myFn function () (var resultado = TimeFormat (Now (), "h: mm: ss tt") if (IsDefined ( "Client.myVar")) (resultado = Client.myVar;) return result;)

La mayoría de las funciones de tomar uno o más argumentos, como muestra el siguiente ejemplo:

 función ADD2 (primerNumero, secondNumber) (return primerNumero secondNumber +;)  # ADD2 (1,2) # 

Los nombres de los argumentos se definen en una lista dentro de los paréntesis después de la declaración de función. Verás usos más avanzados de los argumentos más adelante en este artículo. El ejemplo anterior utiliza argumentos de posición, lo que significa que el primer argumento en la llamada a la función se pasó a la primera alegación en la función, el segundo en la convocatoria se convirtió en el segundo lugar en la función, y así sucesivamente. Usted también puede nombrar a los argumentos de la llamada, si desea pasar en un orden diferente, como sigue:

 # ADD2 (secondNumber = 2, primerNumero = 1) # 

Esta sintaxis no es ampliamente utilizado, ya que es un poco más difícil de leer, sino que puede ayudar a usted, sin embargo, si usted no recuerda el orden de los parámetros de una función. Si se nombrado a ninguno de los argumentos de una llamada de función, sin embargo, todos los argumentos deben ser nombrados. Las funciones pueden ser llamadas en cualquier lugar dentro de una plantilla de ColdFusion, incluso desde dentro de otra función de ColdFusion. Considere el siguiente ejemplo:

 myFn función (myNum, yourNum) (return * myNum yourNum;) myOtherFn function () (var num1 = randRange (1,10); var num2 = randRange (1,10); myFn return (num1, num2);) 

Una función también puede llamar a sí mismo. Se escribió la siguiente función, por ejemplo, para calcular el factorial de un número (un factorial se definirán en un momento):

 función factorial (myNum) (if (myNum EQ 1) (return 1;) else (return * myNum Factorial (myNum - 1);  # Factorial (6) # 

El factorial de 6, por ejemplo, es de 6 x 5 x 4 x 3 x 2 x 1, o 720. Para calcular el factorial, se devolverá el número pasa a la función, multiplicada por el siguiente más pequeños factorial (porque el 6 factorial también se puede representar como 6 x 5 factorial). Usted debe tener cuidado en la creación de las funciones recursivas para asegurarse de que usted tiene una condición de parada. En nuestro caso, dejamos la recursión cuando myNum 1. Si no construimos un estado parada en su lógica, puesto que la solicitud en un bucle infinito. Te mostramos las estructuras que se accede por referencia, mientras que otras variables se hace referencia en valor. Lo mismo se aplica a pasar variables a una función. Si pasa un número a una función, la función tiene una copia local de ese número, y las modificaciones que hace las funciones del número no se repiten fuera de la llamada de función. Las estructuras se pasa a una función por referencia, sin embargo, por lo que cualquier modificación de que la función hace al parámetro de la estructura puede verse fuera de la llamada a la función.

un artículo presentado por Nina Lachey


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "UDF estructura" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 506 users browsing the articles directory