Foros del Web » Programación para mayores de 30 ;) » .NET »

End Function o Exit Function subrayados en verde

Estas en el tema de End Function o Exit Function subrayados en verde en el foro de .NET en Foros del Web. Hola a todos. Antes de nada aclarar que acabo de comenzar a aprender .Net 2005, vengo de programar en VBA. Al tema, en algunas funciones ...
  #1 (permalink)  
Antiguo 20/08/2008, 12:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 16 años, 5 meses
Puntos: 0
End Function o Exit Function subrayados en verde

Hola a todos.

Antes de nada aclarar que acabo de comenzar a aprender .Net 2005, vengo de programar en VBA.

Al tema, en algunas funciones me aparece la linea "Exit Function" o "End Function" subrayada en verde y si me situo encima me da el siguiente mensaje:

La funcion "tal" no devuelve un valor en todas las rutas de acceso de codigo. Podria darse una excepcion de referencia nula en tiempo de ejecucion cuando se utilice el resultado.


Sin embargo puedo ejecutar el codigo y funciona todo de maravilla.

Alguien podria explicarme que sucede?

Gracias.
  #2 (permalink)  
Antiguo 20/08/2008, 13:49
 
Fecha de Ingreso: octubre-2004
Mensajes: 55
Antigüedad: 20 años, 4 meses
Puntos: 0
De acuerdo Respuesta: End Function o Exit Function subrayados en verde

Bueno esto sucede porque el IDE "quiere" asegurarse de que tu función no devuelva un valor nulo y esto provoque un error en tu aplicación, concretamente en el proceso que invoca dicha función.

Okey, tienes una función sencilla y a manera de ejemplo (ya sea pública o privada):

Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer)

'Código de la función

End Function
Esta función, en apariencia, pretende verificar si el mes que pasamos por el parámetro "iMes" tiene 28 días. Bien, como toda función devuelve algo, ese "algo" tiene un tipo de datos. Es recomendable especificar el tipo de dato que va a devolver tu función. En este caso la lógica nos llevaría a esperar un valor Boolean (verdadero o falso).

Entonces lo especificamos:

Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean

'Código de la función

End Function
Bien, como pudiste apreciar, agregamos la especificación "As Boolean" al final de la primer línea de la función indicando así que esperamos como respuesta un valor Boolean (verdadero o falso). Habrás notado tambien, que desde un inicio especificamos el tipo de dato que esperamos como parámetros (iMes As Integer), un número entero al igual que para "iAnio". Es lo mejor, especificar el tipo de datos con el que vamos a trabajar en todo.

Ahora agreguemos funcionalidad a nuestra función:

Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean

If Date.DaysInMonth(iAnio, iMes) = 28 Then
   Return True
End If

End Function
En este caso estamos verificando si efectivamente el mes tiene 28 días, de ser asi devolvemos "True", pero... ¿y si no?. Entonces se nos va a mostrar nuevamente esa advertencia, puesto que existe la posibilidad de que el mes no tenga 28 días pero no estamos especificando qué hacer en tal caso. Por lógica la función devolvería "False" porque se trata de un valor Boolean que por default es "False". ¿Pero si tuvieramos que devolver un numero especifico o una respuesta literal como un "SI" o un "NO"? Efectivamente tu proceso puede trabajar bien y no devolver error alguno a pesar de que se te indica que existe la posibilidad. Sinembargo, por buena costumbre debemos asegurarnos de disminuir el margen de error de nuestra aplicación al 100% Entonces, vamos a asegurarnos de que nuestra función devuelva todas las posibles respuestas. En este caso Verdadero o Falso.

Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean

If Date.DaysInMonth(iAnio, iMes) = 28 Then
   Return True
Else
   Return False
End If

End Function
Ahora sí, nuestra función está facultada para devolver cualquiera de los dos valores que la aplicación espera. Una forma resumida sería esta:

Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer)
   Return (Date.DaysInMonth(iAnio, iMes)) = 28
End Function
Con esto convertimos en automatico el resultante a Boolean, ya sea True o False, puede devolver ambas.

En resumen tienes que especificar el tipo de datos con que trabaja tu funcion y asegurarte de que ésta devuelva una respuesta en cualquier posibilidad o situación, y que ésta, sea del tipo de datos correcto, cierra toda posibilidad de que devuelva un valor nulo.

De igual forma, no invoques "Exit Function" sin antes haber devuelto una respuesta.

Espero haberte sido de ayuda.

Saludos!
  #3 (permalink)  
Antiguo 22/08/2008, 02:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: End Function o Exit Function subrayados en verde

Hola RugalMKing.

Bravo!! Fantastica explicacion. Solucionado el problema.

Muchas gracias por tu ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:34.