Posts Tagged ‘JavaScript’

Función “KILLER” para validar una fecha.

Monday, July 13th, 2009

Ahi les va la masacuata:

function checkDate(d, m, y)
{
return !(isNaN(d)||isNaN(m)||isNaN(y)||(!(y%4==0&&(y%100!=0||y%400==0))&&m==2&&d>28)||(d<1||m<1||y<1000||d>31||m>12||y>9999)||((m==4||m==6||m==9||m==11)&&d>30)||(m==2&&d>29));
}

¿Que hace esta función? (alias WTF)

Realiza una una sencilla operación lógica para validar si los parametros de entrada “d”, “m” y “y” (dia, mes, año correspondientemente) forman una fecha valida entre el 1ro de Enero del año 1000 hasta el 31 de Diciembre del año 9999

Devuelve TRUE en caso de ser una fecha valida, de lo contrario devuelve FALSE

Con esto demuestro que no es necesario poner 40 elses anidados en 80 ifs para hacer una comparación compleja.

Skills up!

Wednesday, October 22nd, 2008

Alguna vez han navegado entre su carpeta de proyectos y viajado al pasado, revisando ese hermoso código de aquel software que desarrollaron para la tiendita de Doña Chona hace 3 años?

Si su respuesta es true un “si” geek supongo que en ese momento se preguntaron.. ¿Quien chingados programo esta porquería? y si no lo han hecho dudare de sus skills como programadores pues a mi me pasa muy seguido!

Esta ultima vez ha sido la mas palpable y la inolvidable, para no hacer largo el cuento:

Por aquellos años cuando AJAX era toda una revolución y todos nos sentiamos dioses enviando y reciviendo datos sin recargar la pagina, se me ocurrio programar una función JavaScript para serializar un formulario.

Lo que pasa es que en ese entonces, esa función brillaba de felicidad, me parecia tan poderosa y perfecta, que la segui utilizando a lo largo de mis scripts… hasta hoy! (y aqui la musica de telenovela)

Resulta que mi buen compañero Kami tuvo el atrevimiento de cuestionar mi logica y despues de alegatas y necedades para variar cabron! (mensaje directo al kami) me decidi a reescribir dicha función.. y ho sorpresa!! descubri que mi skill como JavaScriptero paso de ser un aprendis de hechisero a un poderoso Mago nivel 99, tuve la habilidad de reescribir la función de 81 lineas, en solo 21 (contando los comentarios y key breaks).

Moraleja: no discutan con el necio del kami De vez en cuando, que tengan un ratito libre, hechense un clavado a ese codigo que vienen reutilizando desde hace 5 años, para que vean que tanto ha subido su nivel como programador.

Yo les voy a dejar una imagen, donde se ve claramente la función vieja (a la izquierda) y la nueva función (a la derecha) y ovbiamente, las 2 funciones cumplen el mismo objetivo, solo que una es ruda, la otra es elegante :)

Los invito a publicar una imagen del antes y el despues de sus funciones favoritas, a ver que tanto skill han obtenido con los años

JavaScript: ¿Bug en parseInt?

Wednesday, October 1st, 2008

¿Se han fijado que cuando utilizamos la función parseInt de JavaScript con valores “08″ ó “09″ la función regresa un 0? (si, un bonito y redondo cero)

Si no se habían dado cuenta y han utilizado esta función en alguna de sus aplicaciones mas vale que sigan leyendo.

¿Bug ó no Bug? he ahi el dilema…onion_cry

Pues no, no es un bug.. pero vaya que si podria ocacionar uno que otro dolor de cabesa… entonces ¿what is the fucking problem? … pues el fucking problem es que cuando parseInt recibe como primer parametro de entrada una cadena que inicia con un cero pienza que sera un valor base-8 (octal) y como 8 y 9 no son valores octales validos nos regresa nuestro bonito cero! =) ¡a gusto! ¿no?

Oh dios! onion_wtf ¿y que hago para resolver este problema?

Facil.. utilizaremos el segundo parametro de parseInt, el cual parece que es un parametro sacado de la manga pues es raro ver información sobre el (por lo menos yo supe de su existencia hasta un par de años despues de conocer a parseInt), es decir que lo utilizaremos asi:

parseInt(“08″, 10) ;

¿y que hace ese 10 ahi? onion_? Pues el segundo parametro le dice a parseInt que vamos a trabajar en base-10, y asi evitamos el bonito cero inesperado.
¿Esta demas decir que funciona también con “09″?

ES MUY IMPORTANTE que utilicemos parseInt de la manera correcta para evitar “BUG” en nuestras aplicaciones.

Nota:
Con parseFloat no se presenta este problema, y el parseInt de Opera tampoco lo presenta.

JavaScript: Agregar metodo “trim”

Tuesday, September 30th, 2008
Creador de JavaScript ó ECMAScript

Brendan Eich - Creador de JavaScript

Antes que nada vamos a darle las gracias a Brendan Eich (el feo ese de la derecha) por crear JavaScript, el lenguaje vital para el desarrollo de aplicaciones web, y que sin el la web no seria como hoy la conocemos.

Por cierto, también demosle las gracias por no implementar el sencillo método trim en javascript =) ¿En que piensas Brendanito?

Directo al grano!

Para poder implementar nuestro método trim a javascript, vamos a utilizar prototype y un poquitin de expresiones regulares (si no sabes de que tratan estas 2 cosas raras, picale a los enlaces).

Así de fácil es esto:

String.prototype.trim = function()
{
	// Aquí aplicamos expresiones regulares en los replace
	return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

Oh My Fucking God! ¿pero que paso aquí? Nada, nada damas y caballeros, no se asusten, lo unico que hicimos fue, que por medio de prototype, agregamos un nuevo método al Objeto String (nativo de javascript) llamado trim, el cual se encarga gracias a su método replace (este si no se le olvido a Brendan ¬¬) eliminar cualquier caracter de espacio al inicio y al final de la misma cadena, utilizando expresiones regulares

Veamos un ejemplo:

Supongamos que ya incluimos el código visto mas arriba en nuestra aplicación web, entonces ahora podemos hacer uso de nuestro nuevo y reluciente método trim como si de cualquier otro método de String se tratara.

var sMiString = "   Que bonito estoy n_n  "; // Declaramos nuestro poderoso String
alert("[" + sMiString.trim() + "]"); // Veamos el resultado

¿Fácil no es así? Bastante diría yo.
Ahora ya tenemos un dolor de cabeza menos a la hora de programar nuestras aplicaciones web.

PD: Que alguien me diga ¿que tan difícil era para Brendan implementar esto en JavaScript?

Retro Alimentación:
A ver, quien se anima a escribir un método ltrim y un método rtrim?
Puedes encontrar información sobre ltrim y rtrim en esta bonita pagina