Function (Instrucción)

Visual Basic VBLR

Function (Instrucción)

       

Declara el nombre, los argumentos y el código que componen el cuerpo de un procedimiento Function.

Sintaxis

[Public | Private | Friend] [Static] Function nombre [(lista_argumentos)] [As tipo]
[instrucciones]
[nombre = expresión]
[Exit Function]
[instrucciones]
[nombre = expresión]

End Function

La sintaxis de la instrucción Function consta de las siguientes partes:

Parte Descripción
Public Opcional. Indica que el procedimiento Function es accesible para todos los demás procedimientos de todos los módulos. Si se utiliza en un módulo que contiene Option Private, el procedimiento no estará disponible fuera del proyecto.
Private Opcional. Indica que el procedimiento Function sólo es accesible para otros procedimientos del módulo donde se declara.
Friend Opcional. Se utiliza solamente en un módulo de clase. Indica que el procedimiento Function es visible a través del proyecto, pero no es visible para un controlador de una instancia de un objeto.
Static Opcional. Indica que las variables locales del procedimiento Function se conservan entre las distintas llamadas. El atributo Static no afecta a las variables que se declaran fuera de Function, incluso aunque se utilicen en el procedimiento.
Nombre Requerido. Nombre del procedimiento Function; sigue las convenciones estándar de nombres de variables.
lista_
argumentos
Opcional. Lista de variables que representan argumentos que se pasan al procedimiento Function cuando se llama. La variables múltiples se separan por comas.
tipo Opcional. Tipo de datos del valor devuelto por el procedimiento Function; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitido actualmente), Date, String, o (excepto longitud fija), Object, Variant, o cualquier tipo definido por el usuario.
instrucciones Opcional. Cualquier grupo de instrucciones que se van a ejecutar dentro del procedimiento Function.
expresión Opcional. Valor de retorno de Function.

El argumento lista_argumentos tiene la siguiente sintaxis y partes:

[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]

Parte Descripción
Optional Opcional. Indica que un argumento no es necesario. Si se utiliza, todos los argumentos posteriores de lista_argumentos también deben ser opcionales y declararse mediante la palabra clave Optional. Optional no se puede utilizar para cualquier argumento si se emplea ParamArray.
ByVal Opcional. Indica que el argumento se pasa por valor.
ByRef Opcional. Indica que el argumento se pasa por referencia. ByRef es el valor predeterminado en Visual Basic.
ParamArray Opcional. Sólo se utiliza como último argumento de lista_argumentos para indicar que el último argumento es una matriz Optional de elementos Variant. La palabra clave ParamArray le permite proporcionar un número arbitrario de argumentos. No puede utilizarse con ByVal, ByRef u Optional.
nombre_
variable
Requerido. Nombre de la variable que representa el argumento; sigue las convenciones estándar de nombres de variables.
tipo Opcional. Tipo de datos del argumento pasado al procedimiento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (sólo longitud variable), Object, Variant, o un tipo de objeto específico. Si el parámetro no es Optional, se puede especificar también un tipo definido por el usuario.
valor_
predeterminado
Opcional. Cualquier constante o expresión constante. Sólo es válido para parámetros Optional. Si el tipo es Object, un valor predeterminado explícito sólo puede ser Nothing.

Comentarios

Si no se especifican de forma explícita mediante Public, Private o Friend, los procedimientos Function son públicos de manera predeterminada. Si no se emplea Static, el valor de las variables locales no se conserva entre distintas llamadas. La palabra clave Friend sólo puede usarse en módulos de clase. Sin embargo, puede accederse a los procedimientos Friend por procedimientos en cualquier módulo de un proyecto. Un procedimiento Friend no aparece en la biblioteca de tipos de su clase primaria.

Precaución   Los procedimientos Function pueden ser recursivos; es decir, pueden llamarse a sí mismos para realizar una tarea determinada. Sin embargo, la recursión puede provocar el desbordamiento de pila. La palabra clave Static no se suele utilizar con procedimientos Function recursivos.

Todo el código ejecutable debe estar dentro de procedimientos. No puede definir un procedimiento Function dentro de otro procedimiento Function, Sub o Property.

La instrucción Exit Function produce una salida inmediata de un procedimiento Function. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Function. En cualquier lugar de un procedimiento Function puede aparecer cualquier número de instrucciones Exit Function.

Al igual que un procedimiento Sub, un procedimiento Function es un procedimiento independiente que puede adoptar argumentos, realizar una serie de instrucciones y cambiar los valores de sus argumentos. Sin embargo, a diferencia de un procedimiento Sub, puede utilizar un procedimiento Function en el lado derecho de una expresión de la misma forma en que utiliza cualquier función intrínseca, como Sqr, Cos o Chr, cuando desea emplear el valor devuelto por la función.

Para llamar a un procedimiento Function, utilice en una expresión el nombre de función seguido de la lista de argumentos entre paréntesis. Consulte la instrucción Call para obtener información específica acerca de cómo llamar a los procedimientos Function.

Para devolver un valor de una función, asigne el valor al nombre de la función. En cualquier lugar del procedimiento puede aparecer cualquier número de asignaciones de este tipo. Si no se asigna ningún valor a nombre, el procedimiento devolverá un valor predeterminado: una función numérica devuelve 0, una función de cadena devuelve una cadena de longitud cero ("") y una función Variant devuelve Empty. Una función que devuelve una referencia de objeto devuelve Nothing si no se asigna ninguna referencia de objeto a nombre (mediante Set) dentro del procedimiento Function.

El ejemplo siguiente muestra cómo asignar un valor de retorno a una función llamada BinarySearch. En este caso, False se asigna al nombre para indicar que no se encontró algún valor.

Function BinarySearch(. . .) As Boolean
. . .
    ' Valor no encontrado. Devuelve un valor False.
    If lower > upper Then
        BinarySearch = False
        Exit Function
    End If
. . .
End Function

Las variables empleadas en procedimientos Function se dividen en dos categorías: las que se declaran explícitamente dentro del procedimiento y las que no. Las variables que se declaran explícitamente en un procedimiento (mediante Dim u otra instrucción equivalente) siempre son locales del procedimiento. Las variables que se utilizan pero no se declaran explícitamente en un procedimiento también son locales, a menos que se hayan declarado explícitamente en algún nivel superior fuera del procedimiento.

Precaución   Un procedimiento puede utilizar una variable que no se ha declarado explícitamente en el procedimiento, pero puede ocurrir un conflicto de nombres si algo que definió en un nivel de módulo tiene el mismo nombre. Si su procedimiento hace referencia a una variable no declarada que tiene el mismo nombre que otro procedimiento, constante o variable, se supone que el procedimiento hace referencia a ese nombre a nivel de módulo. Declare explícitamente las variables para evitar este tipo de conflicto. Puede utilizar una instrucción Option Explicit para forzar la declaración explícita de variables.

Precaución   Visual Basic puede reorganizar las expresiones aritméticas para mejorar su eficacia interna. Evite utilizar un procedimiento Function en una expresión aritmética cuando la función cambie el valor de las variables de la misma expresión.