elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  retornar void o algo de utilidad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: retornar void o algo de utilidad  (Leído 3,795 veces)
robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
retornar void o algo de utilidad
« en: 4 Abril 2015, 11:52 am »

Hola me surgio una duda ayer mientras programaba , estaba creando un metodo que añadia elementos a una colección y me  surgio la duda , ¿retorno void o retorno el nodo creado ? , en casi todas las implementaciones retornan void y mi pregunta es ¿porque? 

Quiero decir mejor retornar algo que pueda ser de utilidad en cierto momento que no retornar nada y fue cuando me puse a pensar si habia diferencia de rendimiento al usar uno u otro , alguien que me pueda guiar en mi duda ?


Gracias por su atencion.

PD: ¿cuando retornamos algo internamente donde lo estamos guardando en el stack interno donde tambien se guardan las variables locales o se guarda en memoria?


En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #1 en: 4 Abril 2015, 14:39 pm »

Tienes una casuístitca variada:

Puedes devolver void, en lenguajes como java es lo mas normal ( luego explicaré porque ), porque realmente el retorno de una función suele ser el producto de calcular algo respecto al estado interno de objeto.

Puedes devolver un bool: si se ha insertado o no ( puede que se te haya acabado la memoria ). Y aqui es donde la gente usa void, si algo pasase, normalmente se lanza una excepción.

Devolver el objeto insertado solo lo he visto hacer una vez, y personalmente le veo poco sentido.

Otra opción interesante es devolver toda la lista, esto te permite hacer cosas como:

miLista.add(1)
          .add(2)
          .add(3)
          .add(4)
          .add(5);


Pero gasta algo mas de memoria.


En resumen, pon VOID.  :laugh:

PD: Depende de la arquitectura, pero normalmente cuando sales de una función, el valor de retorno se mete en la pila y luego se desapila.


En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #2 en: 4 Abril 2015, 15:03 pm »

Habría que ver cual es la lógica del método que estás programando?
En que lenguaje? El método, es estático o de clase?

En fin, muchas cuestiones, Como bien dice Oblivi0n si la cuestión es añadir elementos a una colección no tiene sentido devolver nada, aunque podrías devolver algo para controlar que se ha añadido con éxito (bool, int).

En respuesta a tu pregunta, si se mete en la pila, pero también, la pila está en memoria!

Por eso con métodos recursivos cuyos casos de parada no están correctamente determinados, puedes recibir StackOverflow, pues la pila se llenó, o sea, se llenó la memoria.

Salu2s
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #3 en: 4 Abril 2015, 15:04 pm »

Devolver un objeto, depende de si es necesario devolver un valor para una operación concreta o para operaciones que pueden realizarse. Imagina el siguiente escenario:

Código
  1. public class Rectangle {
  2. private Integer y;
  3. private Integer x;
  4.  
  5. public Rectangle() {
  6.  
  7. }
  8. public Rectangle(Integer x, Integer y) {
  9. this.x = x;
  10. this.y = y;
  11. }
  12. public Integer getY() {
  13. return y;
  14. }
  15. public Rectangle setY(Integer y) {
  16. this.y = y;
  17. return this;
  18. }
  19. public Integer getX() {
  20. return x;
  21. }
  22. public Rectangle setX(Integer x) {
  23. this.x = x;
  24. return this;
  25. }
  26. }

Entonces, puedes hacer algo así:
Código
  1. Rectangle rectangle = new Rectangle().setY(5).setX(5);

O también:

Código
  1. Rectangle rectangle = new Rectangle();
  2. rectangle.setY(5);
  3. rectangle.setX(5);

El programador tiene 3 formas de hacer lo mismo, y él usará la que crea conveniente. Ésto aporta flexibilidad.

Respecto a rendimiento, no creo que haya ninguna diferencia en lenguajes modernos. En Java por ejemplo, si creas un objeto dentro de un método, éste se guarda en el HEAP, si es un primitivo en el STACK. Pero ésto no supone un problema de rendimiento, ya que el Garbage Collector lo desechará del HEAP cuando ya no haya ninguna referencia a él.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: retornar void o algo de utilidad
« Respuesta #4 en: 4 Abril 2015, 15:50 pm »

En la librería estándar de C++, list::insert(...) retorna un iterador al valor insertado.
Sin duda más útil que sin retorno.
En línea

robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #5 en: 4 Abril 2015, 19:56 pm »

Gracias por responder, pero creo que al usar mi ejemplo os he confundido con lo que estoy preguntando, el ejemplo era solo eso un ejemplo que no tiene porque tener mucho sentido.


Mi pregunta es, ¿cual es la diferencia entre retornar algo y nada en términos de rendimiento?

En cuanto a los lenguajes supongan de los normales, java c++, c y phyton, no se muy bien internamente cuales serán las diferencias pero creo que la política a seguir para devolver valores en los distintos lenguajes serán bastante similares.

Y de nuevo gracias por responder.

En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #6 en: 4 Abril 2015, 20:49 pm »

Como te había dicho, depende del método. Imagina que tienes una variable int en tu método, el hecho de hacer

Código
  1. return variable;

es O(1). por una constante (que depende del ordenador)

Pero si no devuelves nada, también hay un orden temporal de complejidad (imperceptible), porque el compilador realiza funciones, para entrar y salir del método con el Stack (asi como desempilar las cosas que se modificaron(o no)).

Si el método es void, lo que pasa es que la diferencia en cuanto a rendimiento será imperceptible.

Tambien hay que ver a que te refieres con rendimiento (memoria, tiempo?)

PD: Hablo en relación a C# y .NET, no estoy muy seguro en otros lenguajes.
En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #7 en: 4 Abril 2015, 22:03 pm »

En cuestión de rendimiento todas son iguales. La diferencia sería imperceptible.

En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: retornar void o algo de utilidad
« Respuesta #8 en: 5 Abril 2015, 00:52 am »

Tal vez, la diferencia sea un push y un pop de la pila, en el mejor de los casos.
En línea

robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: retornar void o algo de utilidad
« Respuesta #9 en: 6 Abril 2015, 22:08 pm »

muchas gracias a todos , ya tengo clara la idea , lo marco como solucionado
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
dev-c++ ----> ¿void?
Programación C/C++
lalocr 7 18,938 Último mensaje 21 Abril 2011, 11:05 am
por <<<-Basura->>>
retornar un arreglo en una funcion!
Desarrollo Web
01munrra 1 2,294 Último mensaje 6 Diciembre 2012, 17:39 pm
por Shell Root
Como retornar una matriz.
Programación C/C++
SirLancelot53 7 3,439 Último mensaje 24 Enero 2014, 04:07 am
por SirLancelot53
¿Como paso de programar cosas para ejecutarlas en consola a hacer algo de utilidad? (programas, juegos, etc)
Programación General
Thizz 4 4,924 Último mensaje 29 Junio 2022, 03:51 am
por Thizz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines