Optimización de código

Uno de los temas principales que siempre abordo cuando doy clases de desarrollo de software, es el de forzarnos a nosotros, como programadores, a buscar la forma más óptima de crear código.

Y si bien esto aplica a todas las áreas de desarrollo, en el caso de video juegos es crucial. De hecho, es tan crucial que unas líneas equivocadas pueden hacer que perdamos 1 o 2 FPs, algo que podría ser usado para colocar más objetos en pantalla, mejores texturas o simplemente tener animaciones más fluidas.

Pero, como decía, si bien en video juegos se puede ver fácilmente la diferencia, no es excluyente de ellos. Un código compacto, depurado, limpio, puede también hacer que su tamaño decrezca.

Así es como llegamos a un ejemplo que, entre conceptos de TDD y algo de programación intermedia en JavaScript, necesitamos resolver.

var w = new worker();
w.addToStack(function () { return 10; });
w.addToStack(function (val) { return val; });
w.addToStack(function (val) { return val – 10; });

var counter = 20;

while (w.canUnStack()) {   
    var result = w.doTask(counter);
    counter = result;
   
    if (result !== 10) {
        console.log(‘Test fail’);
        break;
    }
}

El código anterior representa un hipotético caso de pruebas para un objeto que deberemos crear. La tarea es simple: Crear la “clase” worker.

No es difícil darse a la tarea de su construcción. Una primera versión podría ser similar a la siguiente:

function worker() {
    var self = this;
    var stack = [];

    this.addToStack = function (f) {
        stack.push(f);
    };

    this.canUnStack = function () {
        return stack.length > 0;
    };
   
    this.doTask = function (v) {
        var f = stack.pop();
        return f(v);
    };
}

Como vemos, algunas funciones y poco código. Pero la pregunta que debemos hacernos es si este código es realmente óptimo. Por lo que la siguiente tarea será intentar reducir más aún el mismo, no solo por cuestiones de ahorrarnos líneas, si no, con el objetivo de hacerlo más óptimo.

En el siguiente post mostraré una posible solución, y las diferencias de velocidad entre este código y su versión optimizada.

Si aceptas el desafío, deja tus respuestas en los comentarios.


One Comment on “Optimización de código”

  1. gino dice:

    function worker() {
    var stack = [];

    this.addToStack = function (f) {
    stack.push(f);
    };

    this.canUnStack = function () {
    return stack.length > 0;
    };

    this.doTask = function (v) {
    return (stack.pop())(v);
    };
    }


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s