Dev - C++ - Sustituir (If, else if, else) por 3 métodos o funciones

 
Vista:
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Fernando (15 intervenciones) el 05/08/2020 06:05:25
Holas gente tengo un problema que no se si tiene solución.

Un ejemplo del código que tengo:

1
2
3
4
5
6
7
8
9
if (hay_manzanas) {              // En el programa original el contenido del paréntesis es enorme
       como manzanas;
}
else if (hay_naranjas){          // Este también es enorme, por eso me gustaría usar métodos
       como naranjas;
}
else {
       no como;
}

Un ejemplo de lo que quiero hacer:

1
2
3
siHayManzanasComoManzanas();         // Esto lo sé hacer
siHayNaranjasComoNaranjas();             // Esto también
siNoNoComo();                                       // Esto no
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Rodrigo (539 intervenciones) el 05/08/2020 08:46:04
En tu codigo original, solo se ejecuta 1 de las 3 opciones. En lo que propones, se podrian ejecutar las 3 opciones.
Una posibilidad para conservar la idea original es que las funciones retornen un bool para saber si ejecutar el resto del codigo, y podria hacerse este codigo:

1
2
3
if( !siHayManzanasComoManzanas() && !siHayNaranjasComoNaranjas()) {
  siNoNoComo();
}

Para que el codigo se lea mejor, propongo renombrar las funciones a:

1
2
3
if( !hayManzanas() && !hayNaranjas()) {
  noComo();
}

Teniendo este retorno, tambien se podria hacer que las funciones, ademas de retornar un booleano, reciban como parametro booleano con lo que la anterior retorno' y solo ejecutar algo dependiendo del valor que retorno la anterior asi:

1
noComo( hayNaranjas( hayManzanas() ) );

Parece mas ilegible asi, por lo que las funciones podrian renombrarse de nuevo:

1
noComoSiNo( hayNaranjasYNo( hayManzanas() ) );

Si se usan variables globales o campos, podria hacerse la logica sin tanto artificio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Nacho (181 intervenciones) el 05/08/2020 10:37:39
También podrías usar un switch.

1
2
3
4
5
6
7
switch (qué hay)
{
     case manzanas : MePongoMoraoaManzanas();
     case naranjas : MePongoMoraoaNaranjas();
     case nada     : OtroDiaSinComer();
     default
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Fernando (15 intervenciones) el 06/08/2020 02:08:09
Gracias por responder Nacho.
Para este caso en concreto si, pero en mi programa original hay más tipos de manzanas y naranjas, entonces si hay manzanas verdes pero no hay rojas, se me ejecutaría "MePongoMoraoaManzanas();"(por la manzanas verdes) y "OtroDiaSinComer();"(por no haber rojas). Yo necesitaba que se ejecutara sólo un método.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Fernando (15 intervenciones) el 06/08/2020 02:04:45
Muchas gracias Rodrigo, funcionó perfecto ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Nacho (181 intervenciones) el 06/08/2020 14:28:42
Algo que te funciona perfectamente hoy, si mañana tienes que hacer un añadido con más colores de manzanas, igual te descoloca todo. Yo en esos casos procuro hacer una clase con la funciones que hagan falta para gestionar cuantas más posibilidades mejor, y una propiedad de esa clase sí podrías manejarla con un switch.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sustituir (If, else if, else) por 3 métodos o funciones

Publicado por Fernando (15 intervenciones) el 07/08/2020 18:39:05
Buena idea, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar