- Crear un procedimiento
- Salir de una Procedure
- "Al final del evento que contiene la llamada"
- Devolución de un resultado
- Estampación del valor de retorno
- Atributos de extension
Declarando una Procedure/ una función
El método para declarar una Procedure es el mismo independientemente de que sea: Importante: No debes declarar dos Procedure con el mismo nombre (especialmente un Procedure global y un Procedure local). Recordatorio: En WLanguage, no hay distinción entre los procedimientos y las funciones. Las sintaxis para declarar y utilizar los procedimientos también se aplican a las funciones. PROCEDURE Find(FileName, Key, Value) HReadSeek(FileName, Key, Value) IF HFound() = True THEN RETURN True ELSE RESULT False END
Sintaxis
Declarar una Procedure con parámetros Ocultar los detalles
PROCEDURE <Procedure name>(<Parameters>) [<Extension attributes>] [: <Type of return>] <Procedure code>
<PROCEDURE>: Inicio de la declaración de Procedure.Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION. <Procedure name>: Nombre de la Procedure a declarar. <Parameters>: Parámetros pasados a la Procedure. Cada parámetro está separado por una coma. Para más detalles sobre los parámetros, véase Parámetros de un procedimiento. Si su Procedure o función utiliza un elemento del proyecto (ventana, página, reporte, ...), tiene la posibilidad de get la lista de elementos solicitados en la finalización. Para ello, añada un atributo extension en la declaración de la función o de los parámetros Procedure. <Extension attributes>: Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios. <Type of return>: Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...). Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado. Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera.. <Procedure code>: Código de idioma de Procedure para declarar.
Declarar una Procedure sin parámetro Ocultar los detalles
PROCEDURE <Procedure name>() [<Extension attributes>] [: <Type of return>] <Procedure code>
<PROCEDURE>: Inicio de la declaración de Procedure.Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION. <Procedure name>: Nombre de la Procedure a declarar. <Extension attributes>: Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios. <Type of return>: Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...). Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado. Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera.. <Procedure code>: Código de idioma de Procedure.
Declarar un Procedure con parámetros Variable Ocultar los detalles
PROCEDURE <Procedure name>(<Parameters>, ]*) [<Extension attributes>] [: <Type of return>] <Procedure code>
<PROCEDURE>: Inicio de la declaración de Procedure. Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION. <Procedure name>: Nombre de la Procedure a declarar. <Parameters>: Parámetros pasados a la Procedure. Cada parámetro está separado por una coma. Si el número de parámetros que se pueden pasar a la Procedure cambia, utilice el símbolo "*".. Por ejemplo:- Procedimientos que pueden recibir entre 0 y 255 parámetros: Procedure MyProc(*).
- Procedimientos que pueden recibir entre 1 y 255 parámetros: Procedure MyProc(Parámetro1, *).
Para obtener más información, consulte: <Extension attributes>: Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios. <Type of return>: Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...). Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado. Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera.. <Procedure code>: Código de idioma de Procedure para declarar. Observaciones Para forzar la salida de un Procedure, utilice la palabra clave RETURN. En el Procedure, no se ejecuta ninguno de los procesos posteriores a la palabra clave RETURN. Por ejemplo: PROCÉDURE Calculate(Dividend) IF Dividend = 0 THEN Error("Unable to divide by zero") RETURN ELSE ... END
Observaciones: - Si la Procedure devuelve un resultado, utilice la palabra clave RETURN.
- Las palabras clave RETURN y RETURN no pueden utilizarse en el mismo Process.
"Al final del evento que contiene la llamada" Los Procedure s con la opción "Al final del Event que contiene la llamada" activada, y llamados desde un callback Procedure (Procedure utilizado por fListFile, Event, etc.) se ejecutan al final de cada llamada al callback. Ejemplo: // ----------------- // standard case // ----------------- Click of button // beginning of button click code Proc1 // beginning of Procedure1 code Proc2 // beginning of Procedure2 code
Call to EndEvent procedure // end of Proc2 code // end of Proc1 code // end of button click code Execution of EndEvent procedure // ------------------- // callback case // ------------------- Click of button Proc1 Proc2 use of fListFile Callback1 procedure // beginning of code of Callback1 Procedure CallbackProc2 // beginning of code of Callback2 Procedure Call to ProcEndEvent // end of ProcedureCallback2 code // end of ProcedureCallback1 code Execution of ProcEndEvent ProcedureCallback1 // beginning of ProcedureCallback1 code ProcedureCallback2 // beginning of ProcedureCallback2 code Call to ProcEndEvent // end of ProcedureCallback2 code // end of ProcedureCallback1 code Execution of ProcEndEvent Devolución de un resultado Para devolver el resultado del procedimiento a la Process llamante, utilice RETURN. Esta palabra clave se utiliza para devolver: - un valor,
- varios valores.
Por ejemplo: // Procedure that returns a value PROCEDURE Find(FileName, Key, Value) HReadSeek(FileName, Key, Value) IF HFound() = True THEN RETURN True ELSE RESULT False END
// Procedure that returns several values PROCEDURE MyProc() // Process RETURN (1, 2, 3) // Code for calling the procedure ( x, y, z ) = MyProc() // x is set to 1, y to 2 and z to 3
Consejo: Para los Procedure s que devuelven un resultado, se recomienda utilizar la palabra clave FUNCTION en lugar de Procedure para simplificar la lectura del código. Importante: La palabra clave RETURN no debe utilizarse para forzar la salida de un Procedure que devuelva un resultado. La llamada Procedure espera un estado reporte que no será devuelto si se fuerza la salida del Procedure. Estampación del valor de retorno Para especificar el tipo de valor de retorno, basta con especificar este tipo (precedido de ':') al declarar la Procedure. Por ejemplo: PROCEDURE Calculation(): int IF MyExpression = True THEN RESULT "1" // The string "1" will be converted to integer ELSE RESULT 0 END
Observación: Múltiples valores de retorno Tiene la capacidad de asignar un tipo a los valores de retorno. La sintaxis es la siguiente: PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type value N>]]]) Observación: No es necesario especificar el tipo para todos los valores de retorno.. Para evitar especificar el tipo de un valor de retorno, todo lo que tiene que hacer es omitir el tipo o usar el carácter '?. Ejemplo: PROCEDURE Procedure_Name(): (string..string) RESULT(1,2,3)
PROCEDURE Procedure_Name(): (string,?,string) RESULT(1,2,3)
Se permiten los siguientes tipos de valores de retorno: | | | Tipos | Verificaciones realizadas durante la compilación | Comprobaciones/acciones realizadas en tiempo de ejecución |
---|
karaoke | | automatic WLanguage conversiones | unsigned int | | automatic WLanguage conversiones | int de 8 bytes sin signo | | automatic WLanguage conversiones | int | | automatic WLanguage conversiones | Int de 8 bytes | | automatic WLanguage conversiones | system int | | automatic WLanguage conversiones | divisa | | automatic WLanguage conversiones | numérico | | automatic WLanguage conversiones | real | | automatic WLanguage conversiones | 4 bytes reales | | automatic WLanguage conversiones | carácter | | automatic WLanguage conversiones | cadena | | automatic WLanguage conversiones | Cadena ANSI | Sólo se permiten las cadenas sin tamaño | automatic WLanguage conversiones | Cadena UNICODE | Sólo se permiten las cadenas sin tamaño | automatic WLanguage conversiones | buffer | Sólo se permiten las cadenas sin tamaño | automatic WLanguage conversiones | fecha | | automatic WLanguage conversiones | momento | | automatic WLanguage conversiones | datetime | | automatic WLanguage conversiones | lapso | | automatic WLanguage conversiones | procedimiento | Sólo se permiten los tipos Procedure | Sólo se permiten los tipos Procedure | tipo de letra | Sólo se permiten los tipos de fuente | Sólo se permiten los tipos de fuente | <enumeración> | | | Combinación> <combinación | | | Clase> <clase | - "Dinámico" no está permitido.
- Las clases deben estar correlacionadas
| Sólo se permiten conversiones | <estructura> | - "Dinámico" no está permitido.
- las estructuras deben ser las mismas.
| Las estructuras deben ser las mismas. | <advanced type> | - "Dinámico" no permitido
- Los tipos avanzados deben ser los mismos.
| Los tipos avanzados deben ser los mismos. | <.NET class> | "Dinámico" no permitido | | array | - "Dinámico" no permitido
- Comprobación del tipo de elementos
- Comprobación del número de dimensiones
| - Comprobación del tipo de elementos
- Comprobar el número de dimensiones si se suministran las dimensiones,
- Comprobación de cada dimensión
| asociativa array | Comprobación del tipo de elementos | Comprobación del tipo de elementos | stack | Comprobación del tipo de elementos | Comprobación del tipo de elementos | queue | Comprobación del tipo de elementos | Comprobación del tipo de elementos | listar | Comprobación del tipo de elementos | Comprobación del tipo de elementos |
Atributos de extension Los atributos extension disponibles son: - atributo de extensión para la gestión de los procedimientos de zombie:
| | <zombie [ comentario = "texto "]> | Se utiliza para definir una Procedure obsoleta (también llamada Procedure zombi). La palabra clave opcional comment se utiliza para indicar el texto que se mostrará en el error de compilación asociado al obsoleto Procedure. Para obtener más información, consulte Procedimientos de zombie. |
- Atributo extension para gestionar el depurador:
| | Sin paso a paso> <Sin paso a paso> | Permite especificar que la Procedure sea ignorada por el depurador cuando se depura en modo "Paso a paso. |
- Atributos de extensión específicos de los procedimientos locales, globales o internos:
| | "<extension>" | Indica que la Procedure es una extensión Procedure. Esta Procedure WLanguage se puede utilizar con un tipo WLanguage como una función WLanguage nativa. Para obtener más información, consulte extension Procedure. | <automatic> | Permite especificar que este Procedure se ejecute automáticamente tras el código de inicialización (de la ventana, Page o proyecto).
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos.
Atención, este atributo de extensión no puede aplicarse a un Procedure interno. | <fin Event> | Se utiliza para indicar que este Procedure se ejecutará cuando el Process que contiene la llamada Procedure haya terminado. Para obtener más información, consulte "Al final del evento que contiene la llamada".
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <fin Process> | Se utiliza para indicar que este Procedure se ejecutará cuando el Process que contiene la llamada Procedure haya terminado.
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. |
- atributo de extensión para gestionar temporizadores:
| | <call again[=tipo de llamada]> | Permite especificar, en un Procedure llamado en un timer, el modo de funcionamiento de las llamadas posteriores. Este atributo de extensión debe utilizarse con <timer>. El valor opcional de este atributo extension puede ser:
| | ignore (Valor predeterminado) | La Procedure se llama inmediatamente. No hay tiempo de espera para llamar a Procedure. El procedimiento se llama una sola vez sin repetition. | nuevo | Se activa una nueva timer. La Procedure se llama en esta nueva timer. Precaución, el anterior timer no se ha detenido. Los temporizadores se acumularán en la memoria. | Reinicio | Se utiliza para reiniciar el temporizador automáticamente al final de la Procedure. <interval> se utiliza para definir el tiempo interval entre cada llamada al Procedure. | Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <delay=duración en centésimas de segundo> | Se utiliza para especificar el tiempo de espera antes del inicio del procedimiento en una Timer( durante la primera llamada). Este atributo de extensión debe utilizarse con <timer>. El valor opcional delay en centésimas de segundo permite especificar este tiempo de espera. Si no se especifica este valor, deberá especificarlo cuando utilice <timer>.
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <interval=duración en centésimas de segundo> | Permite especificar la duración (interval) entre 2 llamadas al Procedure. Este atributo de extensión debe utilizarse con <timer> o <repetition>. El valor opcional interval en centésimas de segundo permite especificar este tiempo interval. Si no se especifica este valor, debe especificarse con <timer>.
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <repetition [=número de repeticiones]> | Se utiliza para especificar que la Procedure se llama varias veces en una fila (repeticiones). El valor opcional número de repeticiones se utiliza para especificar el número de llamadas al Procedure.- Si no se especifica este valor, la repetition seguirá hasta:
- EndAutomatedProcedure.
- se cierra el elemento al que pertenece la Procedure (ventana, Page, reporte).
- se destruye la instancia a la que pertenece la Procedure (para más detalles sobre el concepto de instancia, véase la ayuda de Instanciar un objeto).
- el fin de la aplicación (aplicación cerrada por el usuario, o uso de EndProgram).
- Si se especifica este valor, se llamará a la Procedure tantas veces como el número especificado.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <timer [=intervalos en centésimas de segundo]> | Se utiliza para especificar que el Procedure se ejecutará en un timer. Este atributo de extensión es equivalente a TimerSys. La repetición es automatic. El valor opcional interval en centésimas de segundo se utiliza para especificar el tiempo interval entre 2 repeticiones: - Si no se especifica este valor, es necesario especificar el tiempo interval entre 2 repeticiones utilizando <interval>.
- Si no se especifica este valor, los valores de <retraso> y <interval> se inicializan con el valor del interval especificado.
Este atributo de extensión no es compatible con <Thread> y <principal Thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. |
- atributo de extensión para manejar hilos:
| | <Thread> | Permite especificar que el Procedure se ejecute en un Thread secundario. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.
Este atributo de extensión no es compatible con <timer> y <main thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <principal Thread> | Se utiliza para especificar que el Procedure se ejecutará en el Thread principal. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.
Este atributo de extensión no es compatible con <timer> y <thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <principal Thread asíncrono> | Indica que la Procedure se ejecutará en el hilo principal y que no es necesario esperar al final de la ejecución de esta Procedure. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.
Este atributo de extensión no es compatible con <timer> y <thread>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <seguro thread> | Se utiliza para especificar que el Procedure se ejecutará en un Thread secundario seguro. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.
Este atributo de extensión no es compatible con <timer>, <main thread> y <UI>.
Además, puede ver la ayuda sobre Procedimientos automáticos. | <contexto ligero de HFSQL>>. | Activa la copy inmediata de una parte del contexto HFSQL actual. Solo se almacenan los directorios que contienen los archivos de datos en modo HFSQL Classic y/o las conexiones en modo HFSQL Client/Server.
Este atributo de extensión debe utilizarse con <Thread>. Para más detalles sobre la gestión de los hilos, consulte la ayuda sobre ThreadExecute. Además, puede ver la ayuda sobre Procedimientos automáticos. Este atributo de extensión no está disponible. | <Contexto completo de HFSQL>>. | Activa la copy inmediata del contexto HFSQL actual. Se recomienda si el hilo debe tener en cuenta las posiciones actuales en los archivos y consultas del contexto llamador.
Este atributo de extensión debe utilizarse con <Thread>. Para más detalles sobre la gestión de los hilos, consulte la ayuda sobre ThreadExecute.
Además, puede ver la ayuda sobre Procedimientos automáticos. Este atributo de extensión no está disponible. |
Esta página también está disponible para…
|
|
|