Josep Portella
Un vestigio del lenguaje C clásico
Octubre de 2011
Esta obra está bajo una licencia de
Atribución-SinDerivadas 3.0 Creative Commons.
En la mayoría de las estructuras de control de ciertos lenguajes de
programación con sintaxis basada en C, como por ejemplo PHP o
JavaScript, existe la posibilidad de agrupar sentencias entre llaves
({}
) o bien poner una sola sentencia sin llaves. Sin embargo, en la
declaración de funciones no existe esta opción, tal como pasa en el
lenguaje C; las llaves son obligatorias aunque haya una sola
sentencia.
Intuyo que los diseñadores de estos lenguajes no se pararon a pensar si debían o no debían dar la opción de omitir las llaves en funciones de una sola sentencia, sino que simplemente vieron que en C se hacía así y no le dieron más vueltas.
Técnicamente no habría problema en dejar omitir las llaves en la declaración de funciones de una sola sentencia en PHP y JavaScript. De hecho, se permite hacerlo en el nuevo estándar 1.8 de JavaScript. Por otro lado, en C no se puede por compatibilidad con el C clásico o K&R, el lenguaje tal como fue definido en la primera edición de El Lenguaje de Programación C de Kernighan y Ritchie.
Si comparamos la declaración de una función que devuelve el cuadrado de un entero en C estándar (ANSI C)
int
square (int x)
{
return x * x;
}
con la misma función en C clásico
int
square (x)
int x;
{
return x * x;
}
podemos ver que cambia el lugar donde se declara el tipo del parámetro, y que en C clásico se necesitan las llaves para distinguir un declaración de tipo de parámetro de una sentencia. En el C estándar esto ya no se hace así, de forma que si no necesitase ser compatible con el estilo clásico de declaración de funciones, entonces sería posible omitir las llaves en funciones de una sola sentencia.