Ver Mensaje Individual
  #70 (permalink)  
Antiguo 03/12/2014, 01:47
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Cita:
Iniciado por leosansan Ver Mensaje
Estoy seguro que si algunos de los que han opinado en contra del operador condicional, incluido el encadenado, lo ponen en práctica cuatro o cinco veces ya no podrán prescindir de él.
La verdad es que se nota que tienes devoción por ese operador jejejeje.

Mi punto de vista personal es que es útil a veces, cuando hay que hacer una comparación sencilla... en otros tantos casos creo que es más rápido de entender un código con el clásico if.

Pero es como todo, son gustos. En mi caso:

* "auto" lo uso casi exclusivamente cuando trabajo con iteradores

Código C++:
Ver original
  1. std::map< std::string, std::string > mapa;
  2.  
  3. // Prefiero esto
  4. for ( auto it = mapa.begin( ); it != mapa.end( ); ++it )
  5.  
  6. // A esto
  7. for ( std::map< std::string, std::string >::iterator it = mapa.begin( );
  8.       it != mapa.end( ); ++it )

* las lambdas las suelo reservar para operacines sencillas sobre contenedores:

Código C++:
Ver original
  1. std::vector< std::pair< int, std::string > > datos = { /* lo que sea */ };
  2. const int numero = 5;
  3. const std::string texto = "prueba";
  4.  
  5. // Prefiero esto
  6. auto it = std::find_if( datos.begin( ), datos.end( ),
  7.                         [numero,texto]( const std::pair< int, std::string > >& pareja )
  8.                         { return pareja.first == numero && pareja.second == texto; } );
  9. if ( it != datos.end( ) )
  10.   // registro encontrado
  11.  
  12. // A esto
  13. for ( auto it = datos.begin( ); it != datos.end( ); ++it )
  14. {
  15.   if ( it->first == numero && it->second == texto )
  16.     // Registro encontrado
  17. }

En este caso, soy consciente de que el código, por longitud, es más largo. Las ventajas que le veo son
  • No me tengo que preocupar por los iteradores
  • Es facil reconocer que con "find_if" estoy buscando un elemento en el vector
  • La lambda es muy sencilla de entender

Debido a esto, creo que el código acaba siendo menos propenso a errores, sobretodo errores tontos de esos que te hacen perder alguna que otra hora hasta que das con ellos.

* El modificador "override" lo uso siempre.

Que el compilador me avise si una función en una clase hija no puede sobreescribir a ninguna función virtual en el padre no tiene precio, sobretodo en aplicaciones de tamaño medio/grande.

--------------------------

Bueno, son cosas que creo que se suelen ver en mis códigos. Como todo en esta vida, a algunos les parecerá mejor y a otros peor. En el fondo tampoco es un tema relevante. Cada uno tiene su propia forma de codificar y, siendo sincero, prefiero veinte condicionales ternarios anidados que algunas de las perlas que me suelo encontrar en mi día a día.