martes, 31 de marzo de 2009

Sobrecarga en Javascript. Un faltante?

Un día de estos que codificaba unas funciones en Javascript, quise inocentemente, hacer una sobrecarga de funciones, abro paréntesis por si acaso (

La sobrecarga permite declarar funciones dentro de un mismo "scope" (una misma clase por ejemplo) que se llaman igual pero que reciben parametros diferentes ya sea en número o tipo, por ejemplo (pseudocódigo nada formal :D):
  1. foo(int x, int y);
  2. foo(float z);
Si invoco foo con dos enteros la primera función será llamada, caso contrario si la invoco con un parámetro de tipo float.

)
Pero me di cuenta que la sobrecarga de funciones no existe en Javascript; si declaro dos funciones, la última declaración sobre escribe la primera. Me pregunto si esta cualidad de sobrecarga solo tiene sentido en lenguajes OO ("object oriented"). En todo caso lo que si permite Javascript es invocar las funciones con 0..n parámetros aunque la declaración de la función establezca n.

En mi código usé la siguiente línea para evaluar si el primer argumento viene en la invocación:



function foo(x) {
if (typeof x == 'undefined') {
x = 5;
}
return 5 * 2;
}