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 C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Consulta) Optimizando programas omitiendo los saltos de líneas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consulta) Optimizando programas omitiendo los saltos de líneas  (Leído 3,997 veces)
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
(Consulta) Optimizando programas omitiendo los saltos de líneas
« en: 15 Marzo 2016, 23:42 pm »

Hola, muy buenas. Haciendo un código me ha surgido una duda bastante importante a mi parecer. Según tengo entendido, una buena función es aquella que apenas tiene 'return'. Bien, pues yo quiero hacer una función con un diagrama de flujo como el siguiente:

Realizar Operación
Comprobar si ha salido bien
>> Ha salido mal
     Salir del programa
>> Ha salido bien
Realizar Operación 2º
>> Ha salido mal
     Salir del programa
>> Ha salido bien
Realizar Operación 3º
...
Y así sucesivamente hasta que todas las operaciones hayan terminado con éxito. Eso, en C++, sería algo así:

Código
  1. bool funcion() {
  2.    Realizar_Operacion_1();
  3.    if(Operacion_1_ha_tenido_exito() == false) {
  4.        return false;
  5.    }
  6.  
  7.    Realizar_Operacion_2();
  8.    if(Operacion_2_ha_tenido_exito() == false) {
  9.        return false;
  10.    }
  11.    Realizar_Operacion_3();
  12.    ...
  13.  
  14.    return true;
  15. }

Ahora bien, si tenemos en cuenta lo que dije al principio, este programa no sería el mejor porque tiene muchos saltos de línea 'return'. Entonces, otra forma de solucionarlo es así:

Código
  1. bool funcion() {
  2.    Realizar_Operacion_1();
  3.    if(Operacion_1_ha_tenido_exito() == false) {
  4.        return false;
  5.    } else {
  6.        Realizar_Operacion_2();
  7.        if(Operacion_2_ha_tenido_exito() == false) {
  8.            return false;
  9.        } else {
  10.            Realizar_Operacion_3();
  11.            ...
  12.        }
  13.    }
  14.  
  15.    return true;
  16. }

Pero este código se hace muy "ancho" cuando hay muchas operaciones a comprobar.

Entonces, lo último que se me ha ocurrido es lo siguiente:
Código
  1. bool funcion() {
  2.    bool error = false;
  3.  
  4.    Realizar_Operacion_1();
  5.    if(Operacion_1_ha_tenido_exito() == false) {
  6.        error = true;
  7.    }
  8.  
  9.    if(error == false) {
  10.        Realizar_Operacion_2();
  11.        if(Operacion_2_ha_tenido_exito() == false) {
  12.            error = true;
  13.        }
  14.    }
  15.  
  16.    if(error == false) {
  17.        Realizar_Operacion_3();
  18.        if(Operacion_3_ha_tenido_exito() == false) {
  19.            error = true;
  20.        }
  21.    }
  22.  
  23.    ...
  24.  
  25.    return error;
  26. }

Pero no lo veo muy bien, son muchos 'if' que no sé si son necesarios...

Me gustaría saber si saber de algún método mejor para realizar este tipo de diagramas de flujo... Gracias


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #1 en: 15 Marzo 2016, 23:52 pm »

Según tengo entendido, una buena función es aquella que apenas tiene 'return'.

Y donde has oido eso?

Siguiendo con tu ejemplo, yo no veo nada de malo en hacer algo así:

Código
  1. bool funcion()
  2. {
  3.   if (!RealizarOperacion1()) return false;
  4.   if (!RealizarOperacion2()) return false;
  5.   if (!RealizarOperacion3()) return false;
  6.   return true;
  7. }

Saludos!


En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #2 en: 16 Marzo 2016, 00:20 am »

Eso me han comentado, por eso no lo he afirmado... En cualquier caso, creo que el problema reside a nivel de ensamblador, donde la instrucción return "trocea" el programa (sinceramente, no lo sé muy bien, y tampoco sé que puede tener de malo :P)
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #3 en: 16 Marzo 2016, 00:27 am »

Bueno por eso te preguntaba que dónde habías oido eso, por curiosidad.

A nivel de ensamblador, la instrucción return no es más que un jump igual que los ifs, whiles, y cualquier otro bucle, solo que return coge la dirección de salto de la pila.

Pero bueno, a ver si algún experto se pasa y comenta.

Saludos!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #4 en: 16 Marzo 2016, 07:07 am »

El que haya un solo return por función es una de las corrientes de estilo de programación y tiene muchos seguidores, yo me incluyo, aunque no la llevo a rajatabla.
Es como otras como no salir de los bucles con break, no usar goto para la lógica, etc.
Yo digo: todos estos estilos tienen su espacio y su momento. Hay que usar el que, en cada momento,  deje más claro el código a la hora de revisarlo.
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #5 en: 16 Marzo 2016, 08:14 am »

Comprendo... Pero, para que quede claro, escribir un programa como el que he planteado (el que tiene muchos return), en este caso, no estaría mal, ¿no? Gracias!
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #6 en: 16 Marzo 2016, 08:44 am »

La primera y la tercera me gustan, la tercera me gusta más. La 2 no la haría.

Tambien puedes encadenar ifs:
Código
  1. bool retValue = false;
  2. if ( func1 ())
  3. if ( func2 ())
  4. if ( func3 ())
  5.    retValue = true;
  6.  
  7. return retValue;
  8.  

Queda bonito, visible a simple vista y quitas letras de enmedio.
« Última modificación: 16 Marzo 2016, 09:01 am por MAFUS » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #7 en: 16 Marzo 2016, 15:00 pm »

Si, pero el problema de encadenar ifs es que no quiero que las operaciones sigan XD. Me quedaré con la tercera forma, aunque resulte un poco tedioso...

Muchas gracias a tod@s por sus respuestas!
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: (Consulta) Optimizando programas omitiendo los saltos de líneas
« Respuesta #8 en: 16 Marzo 2016, 15:14 pm »

para hoy dia con lo complejo de los compiladores no simplemente convierten pican e codigo y lo pasan a ensamblador...

primero, los satos de linea son irrelevantes, segundo como dice xiruko, a nivel de codigo son igules (aunque los return no son jmp, sino ret, que son casi iguales solo que el ret sabe donde volver, no tiene que indicarsele)

por otro lado el compilador optimiza el código, así que posiblemente a nivel de compilador tus 3 opciones terminen siendo un código ensamblador casi idéntico... dicho esto, lo importante al programar es que sea cómodamente legible pra que pueda revisarse, corregirse y darle mantenimiento facilmente
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Interfaz saltos de líneas para PIC
.NET (C#, VB.NET, ASP)
Meta 0 2,733 Último mensaje 3 Mayo 2009, 18:50 pm
por Meta
Consulta sobre condiciones y saltos
ASM
zonahurbana 9 7,532 Último mensaje 18 Mayo 2014, 02:28 am
por xv0
[Pregunta]: ¿Es normal que los saltos de lineas sean 2 caracteres?
Desarrollo Web
Leguim 2 2,597 Último mensaje 30 Noviembre 2019, 15:27 pm
por Serapis
[Pregunta]: Contar saltos de lineas de una cadena (PHP)
PHP
Leguim 4 7,421 Último mensaje 4 Diciembre 2019, 16:14 pm
por Leguim
[Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Desarrollo Web
Leguim 6 6,312 Último mensaje 20 Diciembre 2019, 01:47 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines