Métodos
Un método es básicamente un trozo de código que ejecuta una o varias acciones. Un método se compone de instrucciones.
Una línea de instrucción realiza una acción, y puede ser simple o compleja. Cada instrucción generalmente consiste en una línea en el método (si es necesario, puede ser dividida utilizando el carácter \
).
El tamaño máximo de un método está limitado a 2 GB de texto o 32.000 líneas de código.
Tipos de métodos
En el lenguaje 4D, hay varias categorías de métodos. La categoría depende de cómo se les pueda llamar:
Tipo | Contexto de llamada | Acepta los parámetros | Descripción |
---|---|---|---|
Métodos proyecto | Por demanda, cuando se llama al nombre del método proyecto (ver Llamando a métodos proyecto) | Sí | Puede contener código para ejecutar acciones personalizadas. Una vez creado un método proyecto, pasa a formar parte del lenguaje del proyecto. |
Método objeto (widget) | Automático, cuando un evento involucra al objeto al que se asocia el método | No | Propiedad de un objeto formulario (también llamado widget) |
Método formulario | Automático, cuando un evento involucra al formulario al que se asocia el método | No | Propiedad de un formulario. Puede utilizar un método formulario para gestionar datos y objetos, pero generalmente es más sencillo y eficiente utilizar un método objeto para estos fines. |
Trigger (o método tabla) | Automático, cada vez que se manipulan los registros de una tabla (Añadir, Eliminar y Modificar) | No | Propiedad de una tabla. Los triggers son métodos que pueden evitar operaciones "ilegales" con los registros de su base. |
Método base | Automático, cuando se produce un evento de la sesión de trabajo | Sí (predefinido) | Hay 16 métodos base en 4D. |
Class | Las funciones de clases se llaman en el contexto de una instancia de objeto | sí | Las funciones de clases pueden estar integradas (por ejemplo collection.orderBy() o entity.save() ), o creadas por el desarrollador 4D. Ver Clases |
Métodos proyecto
Un método proyecto puede tener uno de los siguientes papeles, dependiendo de cómo se ejecute y utilice:
- Subrutina
- Objeto fórmula
- Método de menú
- Método de gestión de proceso
- Métodos de gestión de eventos o errores
También puede ejecutar los métodos de su proyecto manualmente, por ejemplo, para realizar pruebas.
Subrutinas
Una subrutina es un método proyecto que puede considerarse como un ayudante. Realiza aquellas tareas que otros métodos le solicitan. Una función es una subrutina que devuelve un valor al método que la llamó.
Cuando crea un método proyecto, éste pasa a formar parte del lenguaje del proyecto en el que lo crea. Luego puede llamar al método proyecto desde otro método (método proyecto, método objeto...) de la misma manera que llama a los comandos integrados de 4D. Un método proyecto utilizado de este manera se llama una subrutina.
Se utilizan subrutinas para:
- Reducción del código repetitivo
- Clarificación de los métodos
- Facilitar los cambios en sus métodos
- Modularizar el código
Por ejemplo, supongamos que tiene un proyecto de clientes. Al personalizar el proyecto, se da cuenta de que hay algunas tareas que realiza reiteradamente, como la búsqueda de un cliente y la modificación de su registro. El código para hacer esto podría ser:
// Búsqueda de un cliente
QUERY BY EXAMPLE([Customers])
// Selección del formulario entrada
FORM SET INPUT([Customers];"Data Entry")
// Modificación del registro del cliente
MODIFY RECORD([Customers])
Si no utiliza subrutinas, tendrá que escribir el código cada vez que quiera modificar el registro de un cliente. Si no utiliza subrutinas, tendrá que escribir el código cada vez que quiera modificar el registro de un cliente. Si utiliza subrutinas, sólo tendrá que escribirlas una vez. Esta es la primera ventaja de las subrutinas: reducir la cantidad de código.
Si el código descrito anteriormente fuera un método llamado MODIFY_CUSTOMER
, se ejecutaría simplemente utilizando el nombre del método en otro método. Por ejemplo, para modificar el registro de un cliente y luego imprimir el registro, se escribiría este método:
MODIFY_CUSTOMER
PRINT SELECTION([Customers])
Esta posibilidad simplifica enormemente sus métodos. En el ejemplo, no es necesario saber cómo funciona el método MODIFY_CUSTOMER
, sólo lo que hace. Esta es la segunda razón para utilizar subrutinas: clarificar sus métodos. De este modo, sus métodos se convierten en extensiones del lenguaje 4D.
Si necesita cambiar su método de búsqueda de clientes en este proyecto de ejemplo, tendrá que cambiar sólo un método, no diez. Esta es la siguiente razón para utilizar subrutinas: facilitar los cambios en sus métodos.
Utilizando las subrutinas, hace que su código sea modular. Esto significa simplemente dividir el código en módulos (subrutinas), cada una de las cuales realiza una tarea lógica. Considere el siguiente código de un proyecto de de cuentas corrientes:
FIND_CLEARED_CHECKS //Buscar los cheques emitidos
RECONCILE_ACCOUNT //Reconciliar la cuenta
PRINT_CHECK_BOOK_REPORT //Imprimir un informe de la chequera
Incluso para alguien que no conozca el proyecto, está claro lo que hace este código. No es necesario examinar cada subrutina. Cada subrutina puede tener muchas líneas y realizar algunas operaciones complejas, pero aquí sólo es importante que realice su tarea. Le recomendamos que divida su código en tareas lógicas, o módulos, siempre que sea posible.
Objeto fórmula
Puede encapsular los métodos de su proyecto en objetos fórmula y llamarlos desde sus objetos.
Los comandos Formula
o Formula from string
permiten crear objetos de fórmula nativos que se pueden encapsular en las propiedades de los objetos. Permite implementar métodos objetos personalizados.
Para ejecutar un método almacenado en una propiedad objeto, utilice el operador () después del nombre de la propiedad. Por ejemplo:
//myAlert
ALERT("Hello world!")
Luego myAlert
puede encapsularse en cualquier objeto y llamarse:
var $o : Object
$o:=New object("custom_Alert";Formula(myAlert))
$o.custom_Alert() //muestra "Hello world!"
También se admite la sintaxis con paréntesis:
$o["custom_Alert"]() //muestra "Hello world!"
También puede pasar parámetros a su fórmula cuando la llame utilizando $1, $2… al igual que con los métodos de proyecto 4D:
//método fullName
C_TEXT($0;$1;$2)
$0:=$1+" "+$2
Puede encapsular fullName
en un objeto:
var $o : Object
$o:=New object("full_name";Formula(fullName))
$result:=$o.full_name("John";"Smith")
//$result = "John Smith"
//equivalente a $result:=fullName("param1";"param2")
Combinados con la función This
, estos métodos objetos permiten escribir un código genérico muy poderoso. Por ejemplo:
//método fullName2
C_TEXT($0)
$0:=This.firstName+" "+This.lastName
Luego el método actúa como un nuevo atributo calculado que se puede añadir a otros atributos:
var $o : Object
$o:=New object("firstName";"Jim";"lastName";"Wesson")
$o.fullName:=Formula(fullName2) //añade el método
$result:=$o.fullName()
//$result = "Jim Wesson"