Archive for Programación

Que tal si… los parámetros por defecto también tuviesen esto?

Posted in General with tags on February 23, 2013 by Seba

   Hoy, pensando un poco acerca de la vida, se me ocurrió una mejora para cierta posibilidad que nos ofrecen la mayoría de los lenguajes que valen la pena. Me refiero claro está, a los parámetros por defecto.

   Como muchos de nosotros ya sabemos, la forma clásica de escribir parámetros por defecto es simplemente asignándoles un valor en la declaración de una función: ej: “void MyFunction(int a, int b = 24, int c = 88){}”.

   El chiste, es llamar a la función sin especificar todos los parámetros, entonces para llamar a dicha función haríamos algo así: “MyFunction(2);”… y el parámetro por defecto nos completaría los parámetros que “nos faltó” escribir, dejando los 3 parámetros con los valores 2, 24 y 88 respectivamente.

   El tema con los parámetros por defecto, es que nos traen una limitación (con la que se puede vivir perfectamente, pero es una limitación a fin de cuentas).

   Que pasa si nosotros queremos quedarnos con el valor por defecto de “b” (osea 24), pero, a su vez, queremos cambiar el valor de “c”?

   E aquí un pequeño problema, donde un parámetro por defecto tiene prioridad sobre otro. Si nosotros escribimos manualmente el parámetro, escribiendo por ejemplo: “MyFunction(2,24,286);”, si nuestra idea era preservar el valor por defecto de “b”, estamos haciendo algo un poco “peligroso”. Que pasa si cambiamos los parámetros por defecto de “MyFunction” más adelante? Tendríamos que revisar todas las llamadas a “MyFunction” y cambiar todas las veces que pretendíamos volver a asignar un parámetro a su valor por defecto.

   Pensando en esto… y una vez encontrado un leve problema en esta situación, se me ocurrió esto.

Quienes programamos en C# sabemos que este uso de “default”, no es correcto… pero… y si lo fuera?

Que pasaría si la palabra “default” se pudiese usar (también) para especificar el valor de los parámetros por defecto?

Creo yo que sería una elegante solución al problema que planteo.

Y ustedes que opinan?