Saltar al contenido

Falta declaración de devolución en un no-void el método compila

No olvides que en las ciencias informáticas un error casi siempre tiene más de una resoluciones, de igual modo nosotros enseñamos lo más óptimo y mejor.

Solución:

¿Por qué un lenguaje nos permitiría tener una no-void método que tiene un bucle infinito y no devuelve nada?

La regla para no-void métodos es cada ruta de código que devuelve debe devolver un valor, y esa regla se cumple en su programa: cero de cero rutas de código que devuelven devuelven un valor. La regla no es “todos los que no sonvoid El método debe tener una ruta de código que devuelva”.

Esto le permite escribir métodos auxiliares como:

IEnumerator IEnumerable.GetEnumerator() 
 
    throw new NotImplementedException(); 

Eso es un no-void método. Eso posee ser un no-void método para satisfacer la interfaz. Pero parece una tontería hacer que esta implementación sea ilegal porque no devuelve nada.

Que su método tiene un punto final inalcanzable debido a un goto (recuerde, un while(true) es solo una forma más agradable de escribir goto) en lugar de un throw (que es otra forma de goto) no es relevante.

¿Por qué el compilador ni siquiera advierte sobre la devolución de algo?

Porque el compilador no tiene buena evidencia de que el código es incorrecto. alguien escribió while(true) y parece probable que la persona que hizo eso supiera lo que estaba haciendo.

¿Dónde puedo leer más sobre el análisis de accesibilidad en C#?

Vea mis artículos sobre el tema, aquí:

ATBG: accesibilidad de facto y de jure

Y también podría considerar leer la especificación de C#.

El compilador de Java es lo suficientemente inteligente como para encontrar el código inalcanzable (el código después de while lazo)

y desde su inalcanzable, no tiene sentido al agregar un return declaración allí (después while extremos)

lo mismo ocurre con condicional if

public int get() 
   if(someBoolean)    
     return 10;
   
   else 
     return 5;
   
   // there is no need of say, return 11 here;

ya que la condición booleana someBoolean solo puede evaluar a cualquiera true o falseno hay necesidad de proporcionar un returnexplícitamente después if-elseporque ese código es inalcanzabley Java no se queja de ello.

El compilador sabe que el while bucle nunca dejará de ejecutarse, por lo tanto, el método nunca terminará, por lo tanto, un return declaración no es necesaria.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Si entiendes que ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con el resto seniors de este modo contrubuyes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *