Hace ya algún tiempo que busqué por primera vez una librería que permitiera utilizar una LinkedList funcional en Javascript. Después de probar un par de las que google encontró por mí, lo dejé y me lo monté como pude con un array. Un par de veces más he hecho el intento de incluir esta utilidad en mis proyectos, pero nunca he encontrado ninguna que funcionara completamente y tuviera un código lo bastante sencillo como para ir ampliándola a medida que lo necesite.
Esta tarde, tras mi última búsqueda de la Lista Enlazada, he decidido crearla por mí mismo. Y para no reinventar la rueda, ahorrarme tiempo y asegurarme la estabilidad, he decidido copiar los algoritmos que utiliza la LinkedList pública de Java en el JDK 1.6.
He decidido construirla utilizando la declaración de clases de Prototype 1.6. Quizá se podría hacer sin usar ninguna librería externa, pero así los que no lo uséis aún tendréis que probarlo
Después de unas pocas horas, mi LinkedList ya tiene las siguientes funcionalidades:
- Añadir un elemento al inicio o al final de la lista
- Eliminar un elemento concreto (como en Java, el método remove(X) devuelve el elemento eliminado).
- Obtener un iterador ascendente o descendente
- Obtener el tamaño de la lista
Y se me ocurren estas otras, que puede añadir cualquier programador desesperado o aburrido, o que quizá acaba añadiendo yo a medida que las necesite:
- Implementar un modCount como el que usa la LinkedList de Java, que detecte cuando un iterador está en una lista que ha sido modificada desde que se inició el mismo y avise (esto, que sería indispensable en otro contexto, es bastante prescindible en Javascript, ya que la concurrencia sobre la lista va a ser imposible en la mayoría de usos. De todas formas no estaría de más)
- Modificar la implementación de los iteradores para que se puedan hacer iteraciones parciales de la lista (empezar en un índice concreto)
- Implementar un método get(int X), que devuelva el elemento en la posición X de la lista.
- Implementar un método remove(int X), que elimine y devuelva el elemento en la posición X de la lista.
Dejo la librería como archivo adjunto. También dejo adjunta una pequeña demo, en la que podéis ver cómo se usa la librería.
El código está bajo licencia MPL 1.1, lo que significa que se puede usar libremente en websites con cualquier otra licencia, aunque sea comercial, pero cualquier mejora que se haga sobre el código debe ser reportada a su autor.
Por cierto, la demo y el código están en inglés.
Saludos.
Adjuntos:
Demo de la librería
Librería JavaScript LinkedList
Post a Comment