Laburo España: 250.000 ofertas de empleo

Coyote: Modus Vivendi - De regreso a los origenes.

¿El Coyote estara de regreso?

   
  Simplificacion de IF's  

Bueno, en vista de que muchas personas estan muy avidas de ver mis codigos para criticarme, pues aprovechare para explicar el uso del IF simplificado. Este IF es el unico operador ternario en C++, y su sintaxis es: CONDICION ? expresion-del-then : expresion-del-else

Nos devuelve el valor de la expresion a la que entre segun la condicion, y por lo tanto es muy utilizado en asignaciones.
I.e: A = B > 0 ? B : 0;
Aunque como veremos en este ejemplo, puede utilizarce con funciones, operaciones e incluso una combinacion de ambas o una serie de asignaciones o funciones con el operador COMA.
I.e: A = !m_pSet->IsEOF() ? m_pSet->m_valor : m_pSet->MoveFirst(), m_pSet->m_valor;

El siguiente codigo, es algo muy usual al trabajar con bases de datos. Hacemos una consulta en el registro y si no existen datos, pues "activamos" las ALTAS, en caso contrario, activamos las BAJAS y los CAMBIOS. Se asigna el valor que regresa la funcion de apertura o requery, para en caso de que no lo pueda hacer, indique el error y se salga del programa.





// Asignamos la busqueda al Recordset
m_pSet->m_strFilter.Format("alumno = %ld", clave);

// Realizamos la apertura del Recordset
BOOL flag;
if (m_pSet->IsOpen())
     flag = m_pSet->Requery();
else
     flag = m_pSet->Open();

// Si algo salio mal, detenemos el programa
if (!flag) {
     AfxMessageBox("Error Inesperado en la base de datos, al abrir.");
     ExitProcess(1);
     return;
}

// Si no existe registro habilitamos las ALTAS
if (m_pSet->IsEOF()) {
     Alta = TRUE;
     Baja = Camb = FALSE;
}
// Si existe registro habilitamos BAJAS y CAMBIOS
else {
     Alta = FALSE;
     Baja = Camb = TRUE;
}



En este otro codigo, hacemos exactamente los mismo, pero omitiendo los IF's inecesarios y utilizando el IF simplificado.



// Asignamos la busqueda al Recordset
m_pSet->m_strFilter.Format("alumno = %ld", clave);
// Realizamos la apertura del Recordset
if (!(m_pSet->IsOpen() ? m_pSet->Requery() : m_pSet->Open())) {
// Si algo salio mal, detenemos el programa
     AfxMessageBox("Error Inesperado en la base de datos, al abrir.");
     ExitProcess(1);
     return;
}

// Si existe registro habilitamos
// BAJAS y CAMBIOS, sino, las ALTAS
Baja = Camb = !(Alta = m_pSet->IsEOF());

Observese como el IF simplificado, nos evita la declaracion de la variable FLAG, ya que el valor devuelto por el, sera el que devuelva la funcion Requery u Open, segun sea el caso.

El if de la asignacion de variables, es inecesario completamente, ya que si sabemos la correcta aplicacion de los operadores, no daremos cuenta que el IsEOF, devuelve un tipo BOOL (en caso de que sean bool nuestras variables de ALTA, BAJA y CAMBIO, solo se debera hacer un cast de tipo bool a la funcion), y que la asignacion de ALTA, devolvera el valor de la variable, por lo cual unos parentesis nos ayudaran a NEGAR su valor (ya que las otras variables siempre son lo contrario a alta) para asignar el valor correcto a ALTA y CAMBIO.

Bueno, realmente espero que les haya servido este ejemplo sencillo, el cual realmente ahorra tiempo al momento de programar, le da un toque de abstraccion a nuestro codigo, simplificando su analisis, y por ultimo, reduce tiempos de procesador (aunque muchos diran que con los nuevos procesadores, este tiempo es irrelevante, y tienen razon, pero yo soy un nostalgico de las optimizaciones).

Sin duda mi codigo es a la programacion, lo que "La Persistencia del Tiempo" a la pintura, asi que espero un sin numero de criticas.


Gente en contra del sistema: 1.
Agregado en el expediente de: Son Programatikon
Este wey dijo: Victor Ivan Mendez Castillo

 
  El 20 de mayo de 2005 a las 18:55:47, los ilustre con esto.  


  Los lectores opinan:  

Jaja, sabes? me encantan las computadoras, se me hacen tan geniales pero debo decir que me falta un largo pero muy largo aprendizaje, no entendi nada de nada, para mi hablas chino o ruso, pero gracias por compartir

Patricia ha dicho!!,
El 21 de mayo de 2005 a las 10:29:14



Recordar datos

Referencia

URL para referencias o trackbacks

Computadora - TMPGEnc en versiones completamente | 2008-05-30 12:41:00
[...] Coyote: Modus Vivendi - Version completamente remasterizada y sin Coyote: Modus Vivendi - Version completamente remasterizada y sin censura. Manda un mensaje de texto, con la palabra COYOTE al 21111 y recibiras una gran [...]

 
   
   
LaInformacion.com lainformacion.com - Medio Oficial de los Premios Bitacoras 2009