Function (Instrucción, Visual Basic)
Declara el nombre, los parámetros y el código que definen un procedimiento Function.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Partes
Término |
Definición |
attributelist |
Opcional. Vea la Lista de atributos. |
accessmodifier |
Opcional. Puede ser una de las siguientes: |
proceduremodifiers |
Opcional. Puede ser una de las siguientes:
|
Shared |
Opcional. Vea Shared. |
Shadows |
Opcional. Vea Shadows. |
name |
Obligatorio. Nombre del procedimiento. Vea Nombres de elementos declarados (Visual Basic). |
typeparamlist |
Opcional. Lista de parámetros de tipo para un procedimiento genérico. Vea Lista de tipos. |
parameterlist |
Opcional. Lista de nombres de variables locales que representan los parámetros de este procedimiento. Vea Lista de parámetros (Visual Basic). |
returntype |
Obligatorio si Option Strict es On. Tipo de datos del valor devuelto por este procedimiento. |
Implements |
Opcional. Indica que este procedimiento implementa uno o más procedimientos Function, cada uno de los cuales se define en una interfaz implementada por la clase contenedora o la estructura de este procedimiento. Vea Implements (Instrucción). |
implementslist |
Requerido si se suministra Implements. Lista de procedimientos Function que se están implementando. implementedprocedure [ , implementedprocedure ... ] Cada implementedprocedure tiene la sintaxis y las partes siguientes: interface.definedname
ParteDescripción
interface Obligatorio.Nombre de una interfaz implementada por la clase o estructura contenedora de este procedimiento.
definedname Obligatorio.Nombre por el que está definido el procedimiento en interface.
|
Handles |
Opcional. Indica que este procedimiento puede controlar uno o más eventos concretos. Vea Handles (Cláusula, Visual Basic). |
eventlist |
Requerido si se suministra Handles. Lista de eventos que este procedimiento controla. eventspecifier [ , eventspecifier ... ] Cada eventspecifier tiene la sintaxis y las partes siguientes: eventvariable.event
ParteDescripción
eventvariable Obligatorio.Variable de objeto declarada con el tipo de datos de la clase o estructura que provoca el evento.
event Obligatorio.Nombre del evento que controla este procedimiento.
|
statements |
Opcional. Bloque de instrucciones que se ejecutan dentro de este procedimiento. |
End Function |
Termina la definición de este procedimiento. |
Comentarios
El código ejecutable debe estar en un procedimiento. Cada procedimiento se declara a su vez dentro de una clase, estructura o módulo, que se denominan clase contenedora, estructura o módulo.
Utilice un procedimiento Function cuando necesita devolver un valor al código de llamada. Utilice un procedimiento Sub cuando no necesita devolver un valor.
Solo puede definir un procedimiento Function en el nivel de módulo. Esto significa que el contexto de la declaración para una función debe ser una clase, estructura, módulo o interfaz y no puede ser un archivo de código fuente, espacio de nombres, procedimiento o bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados (Visual Basic).
Los procedimientos Function tienen como valor predeterminado el acceso público. Puede ajustar sus niveles de acceso con los modificadores de acceso.
Se puede llamar a un procedimiento Function en el lado derecho de una expresión cuando desee utilizar el valor devuelto por la función. El procedimiento Function se utiliza de la misma manera que utiliza cualquier función de la biblioteca como por ejemplo Sqrt, Cos o ChrW.
Puede llamar a un procedimiento Function con el nombre del procedimiento, seguido por la lista de argumentos entre paréntesis, en una expresión. Si no se proporcionan argumentos, se pueden omitir los paréntesis. Sin embargo, el código es más legible si se incluyen siempre los paréntesis.
Se puede llamar una función también mediante la instrucción Call. En cualquier caso, el valor devuelto se pasará por alto.
Nota
Puede utilizar expresiones lambda para definir expresiones de función en línea. Para obtener más información, vea Expresión de función (Visual Basic) y Lambda (expresiones) (Visual Basic).
Reglas
Tipo de valor devuelto. La instrucción Function puede declarar el tipo de datos del valor que devuelve. Puede especificar cualquier tipo de datos o el nombre de una enumeración, estructura, clase o interfaz.
Si no especifica returntype, el procedimiento devuelve un tipo Object.
Implementación. Si este procedimiento utiliza la palabra clave Implements, la clase contenedora o la estructura también deben incluir una instrucción Implements inmediatamente después de la instrucción Class o Structure. La instrucción Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre con el que una interfaz define Function (en definedname) no tiene que ser el mismo que el nombre de este procedimiento (en name).
Comportamiento
Volver de un procedimiento. Cuando el procedimiento Function vuelva al código de llamada, la ejecución continúa con la instrucción que sigue a la instrucción que lo llamó.
Las instrucciones Exit Function y Return provocan una salida inmediata de un procedimiento Function. Puede aparecer cualquier número de instrucciones Exit Function y Return en cualquier parte del procedimiento y puede combinar instrucciones Exit Function y Return.
Valor devuelto. Para devolver un valor de una función, se puede asignar el valor al nombre de función o incluirlo en una instrucción Return. El ejemplo siguiente asigna el valor devuelto al nombre de función myFunction y, a continuación, utiliza la instrucción Exit Function para volver:
Function myFunction(ByVal j As Integer) As Double myFunction = 3.87 * j Exit Function End Function
Si utiliza Exit Function sin asignar un valor a name, el procedimiento devuelve el valor predeterminado del tipo de datos especificado en returntype. Si no se especifica returntype, el procedimiento devuelve Nothing, el valor predeterminado de Object.
La instrucción Return asigna el valor devuelto y sale de la función. Esto se muestra en el siguiente ejemplo.
Function myFunction(ByVal j As Integer) As Double Return 3.87 * j End Function
Solución de problemas
- Orden de ejecución. Visual Basic reorganiza a veces las expresiones aritméticas para aumentar la eficacia interna. Por esta razón, evite utilizar un procedimiento Function en una expresión aritmética cuando la función cambie el valor de las variables en la misma expresión.
Ejemplo
En el siguiente ejemplo se utiliza la instrucción Function para declarar el nombre, parámetros y código que forman el cuerpo de un procedimiento Function. El modificador ParamArray permite a la función aceptar un número variable de argumentos.
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
En el ejemplo siguiente se invoca a la función declarada en el ejemplo anterior.
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module
Vea también
Tareas
Cómo: Usar clases genéricas (Visual Basic)
Solucionar problemas de procedimientos (Visual Basic)
Referencia
Sub (Instrucción, Visual Basic)
Lista de parámetros (Visual Basic)
Instrucción Dim (Visual Basic)
Call (Instrucción, Visual Basic)
Expresión de función (Visual Basic)