29 mar 2011

Refactorizar... ¿es mejor?

¿Que es más rapido?

¿Un ciclo for() con un if() interior?
Ejemplo:




for(...) {
...
...
if(b)
A
else
B
...
...
}



O, ¿Un if() con un ciclo en cada opcion?

Ejemplo:




if(b)
for(...) {
...
...
A
...
}
else
for(...) {
...
...
B
...
}



La interrogante esta servida. Probaré esto en los próximos días y veré que resulta.

Gracias por su atención

4 comentarios:

Gastón Quezada dijo...

Como ejemplo lo encuentro valido, pero desde el punto de vista de la eficiencia opto por la opción A.

Ahora yo te puedo hablar de la refactorización y para eso no hay que ir muy lejos, solo hay que mirar a tu buen amigo ePOS.

Este conjunto de objetos ha sido afectado por una constate refactorización, solo con el fin de acabar con aquellos que dicen jurar de GUATA que lo que esta ahí es un programa.

Para ejemplificar mas este tema de la FAMOSA REFACTORIZACIÓN, mira lo siguiente:

Enunciado: Obtener las iniciales del nombre GASTON QUEZADA. Utilizamos Java por ser mi lenguaje favorito.

Opción 1)
String nombre = "Gaston Quezada";

String[] cadenas = nombre.split(" ");
System.out.println("primera inicial|" + cadenas[0].charAt(0));
System.out.println("segunda inicial|" + cadenas[1].charAt(0));


Opción 2)
int indice = nombre.indexOf(" ", 0);
String nombre1 = null;
String apellido1 = null;
if ( indice != -1 ){
nombre1 = nombre.substring(0, indice);
apellido1 = nombre.substring(indice+1, nombre.length());
System.out.println("primera inicial|" + nombre1.charAt(0));
System.out.println("segunda inicial|" + apellido1.charAt(0));
}

Opción 3)
int indice2 = nombre.indexOf(" ", 0);
String nombre2 = null;
String apellido2 = null;
if ( indice != -1 ){
nombre2 = nombre.substring(0, indice);
apellido2 = nombre.substring(indice+1, nombre.length());
System.out.println("primera inicial|" + nombre2.substring(0, 1));
System.out.println("segunda inicial|" + apellido2.substring(0, 1));
}

RESULTADOS:

Opción 1)
primera inicial|G
segunda inicial|Q
Opción 2)
primera inicial|G
segunda inicial|Q
Opción 3)
primera inicial|G
segunda inicial|Q


Entonces así tal como lo define Wikipedia, la refactorización se utiliza a menudo para describir la modificación del código fuente sin cambiar su comportamiento.

Ahora, es preciso tomar en cuenta que si antes de codificar tu aplicación hubo un proceso claro de definición de estándares y metodologías de trabajo y desarrollo podríamos llevar la refactorización a su mínima expresión, hasta eliminarla por completo.

Con respecto a tu pregunta, la respuesta solo depende de que lado de la fuerza estas.

¿Calidad o Cantidad?

Saludos,
GQ

El compa Rorro dijo...

Mas que calidad o cantidad... estoy mirando acerca de si existe mucha diferencia en la duracion de la ejecucion entre las formas de mi ejemplo (al margen de la calidad, o cantidad de codigo).
Si consideramos que el ciclo for() de mis ejemplos se puede ejecutar unos cuantos cientos de miles de veces, la evaluacion constante del if() puede afectar el rendimiento en velocidad.

Veremos que resulta

Gastón Quezada dijo...

Entonces cambia el enunciado de tu post. Se debería llamar ¿Que es mas eficiente?

El compa Rorro dijo...

cuando existe un error en el titulo, no se debe cambiar.
(no conviene por el SEO).
En todo caso, gracias por la acotacion.
;)

Publicar un comentario