No hay advertencia en VB.NET cuando la función no tiene retorno
Algunos comentarios sobre la pregunta de desbordamiento de pila¿Por qué el compilador de C # no impide que las propiedades se refieran a sí mismas? con respecto a las advertencias me hizo pensar en viejos problemas que siempre me engañaban cuando escribía más código VB.NET.
Uno de ellos fue el hecho de que el compilador no le advirtió si declaró una Función pero nunca hizo una declaración de Devolución explícita o asignó el nombre de la Función. Al ejecutar Visual Studio 2008, acabo de hacer un pequeño proyecto experimental, y parece que el comportamiento nunca se ha solucionado. Creé una aplicación de consola de Visual Basic, con el siguiente código:
Module MainModule
Sub Main()
Dim test As Boolean = TestWarning()
End Sub
Function TestWarning() As Boolean
Console.WriteLine("There is no Return Statement")
End Function
End Module
También entré en la Configuración del proyecto y volvíOn Option Strict
yOption Explicit
. También configuré las Configuraciones de advertencia para que "Función / Operador sin valor de retorno" esté configurado en Error.
Compilé el proyecto y no recibí ninguna advertencia ni error en la función TestWarning (). Este parece ser un gran lugar para poner una advertencia, ya que el valor predeterminado será False, y es posible que simplemente haya olvidado hacer una devolución. C # producirá un error sin una declaración de devolución. Pensé que VB.NET hizo lo mismo con la configuración "Función / Operador sin valor de retorno". ¿Es esto un error, o hay algo que me falta?
Experimentación adicionalFunction TestWarning() As Boolean
If DateTime.Now.DayOfWeek = DayOfWeek.Monday Then
Return False
Else
Console.WriteLine("There is no Return Statement")
End If
End Function
Si tengo un explícitoReturn
en unIf
y nada en elElse
, tampoco hay advertencia o error. Simplemente tomará el valor predeterminado, aunque probablemente haya pretendido (a través del estilo de programación) tener un retorno explícito. En este caso, devolví explícitamenteFalse
(que es el valor predeterminado para Boolean), por lo que es probable que haya sido un error oculto que debería haber devueltoTrue
en elElse
.