Symfony, ¿dos o cuatro espacios?

Fabien Potencier, creador del framework Symfony, anunció hace dos días la modificación de las normas de escritura (coding standards) del código fuente de Symfony 2. De esta forma, Symfony abandonará su propio estilo de programación para adoptar el estilo estandarizado por PEAR y Zend Framework.

El primer cambio importante ha sido el commit 83c6d337e2fa0b309e8a de github, mediante el que los dos espacios en blanco de tabulación se sustituyen por cuatro espacios en blanco. Como era de esperar, muchos programadores han mostrado su disconformidad con el cambio y sugieren volver a los dos espacios en blanco o utilizar tabuladores.

El propio Fabien ha intentado explicar su decisión mediante comentarios en twitter y github:

"Sólo se trata de adoptar un estándar. A mí tampoco me gusta [el nuevo estilo de programación] pero a la hora de la verdad no es un tema tan importante. (fuente) "Soy el primero al que no le gustan nada ni los cuatro espacios ni las llaves puestas de esa forma. Pero en serio, no es algo tan importante. Creo que es lo mejor para Symfony y por eso lo hacemos" (fuente)

Después de los cuatro espacios, el siguiente paso será corregir la posición de las llaves de apertura de las sentencias de control (algo que ya se ha añadido en el fork de Symfony de Fabien).

Para los más curiosos, el siguiente comando es el que utilizó Fabien para reemplazar los dos espacios por cuatro en todo el código fuente de Symfony:

find src/ -name '*.php' | xargs perl -p -i -e 's#^((?: )+)#$1$1#mg'

Modificar la posición de las llaves de apertura ha sido un poco más complicado, ya que los comandos utilizados han sido los siguientes:

// replacing in all php files
for i in `find . -name *.php`; do sed -i -r -n '1h;1!H;${;g;s/(\n {8,}(if|else|else ?if|foreach|for|while|do|switch|try|catch) ?[^\r\n]*?) *?[^{a-z0-9$]+?\{([^ ]*)/\1 {\3/g;s/(\n {8,})\}[^}a-z0-9$]+(else|else ?if|while|catch)/\1} \2/g;p;}' $i; done

// checking php linter doesn't report errors (it does in some code templates, but if you check with a clean checkout the errors were already there before)
for i in `find . -name *.php`; do php -l $i 1>/dev/null; done

// dump the diff and filter out irrelevant lines so it's easier to scan because it's freakin' big :)
git diff | grep '^[+-] ' > changes.diff

Comentarios

  1. Hubiera sido mas sencillo, agregar a zend studio todo el código del framework que se quería "normalizar", establecer el estándar a utilizar y decirle a zend studio que formatee todo el proyecto con el nuevo estandar. =)

    Bien por el cambio!

    Muy bueno el blog

    Mariano Del Rosso el 9 de mayo de 2010, 17:24:59

  2. Siempre me pareció vergonzoso los 2 espacios en blanco, y ahora 4 ??? Acaso se volvieron locos??? Existe una cosa que se llama tabulación y eso es lo mas sensato ya que cada uno pueda elegir con que perspectiva visualizar el código. Symfony es una maravilla como framework pero la tabulación que tiene es de lo peor que he visto en 10 años como programador. Por favor eviten hablar de estándar y normalización cuando hagan esas atrocidades.

    Fabian Cabrera el 22 de mayo de 2010, 13:11:44

  3. @Fabian, los responsables de Symfony hablan de "estandar y normalización" porque lo más parecido a un estándar en el mundo de PHP es lo que hacen en PEAR y Zend Framework. Estos últimos utilizan tabulaciones de 4 espacios en blanco y por eso Symfony ha decidido seguir este pseudo-estándar en vez de inventar el suyo propio.

    Algunos programadores también se han quejado de los espacios y coinciden contigo en que sería mejor utilizar tabuladores, pero de momento no se va a cambiar esta decisión.

    Javier Eguiluz el 22 de mayo de 2010, 17:04:25

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

8 de mayo de 2010

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.