Si es posible formatear automáticamente el código antes y después de un commit de control de fuente, checkout, diff, etc. ¿realmente necesita una compañía un estilo de código estándar?

Si es posible formatear automáticamente el código antes y después de un commit de control de fuente, checkout, diff, etc. ¿realmente necesita una compañía un estilo de código estándar?

Se siente como debates de coding style estándar que han estado furiosos desde que comenzó la progtwigción como "poner el soporte en la siguiente línea" o "sangrar adecuadamente" (ya no son esenciales.

Me doy count de que en los idiomas en los que el espacio en blanco importa, el diff tendrá que considerarlo, pero para los idiomas en los que el estilo es una preference personal, ¿hay realmente una necesidad de preocuparse más por eso?

El auto-formatting solo puede abordar espacios en blanco.

No se dirigirá a los desarrolladores que dan variables con nombres extraños y sin sentido. No abordará algunos desarrolladores que tienen funciones devuelven nulo en un error vs lanzando una exception.

Estoy seguro de que otros pueden pensar en más ejemplos.

Esto es lo que hacemos en mi trabajo:

Todos usamos Eclipse. No tenemos una política para usar Eclipse, pero de alguna manera ninguno de nosotros es un tipo IDEA / IntelliJ. También creemos que nuestro código debe escribirse teniendo en count el legado. Esto significa que nuestro código tiene que ser legible de cierta manera, incluso años después (n . ° 1 ) sin importar quién lo escribió y si esa persona ya está en la empresa.

Eclipse tiene algunas funciones prácticas, formatting automático al save y una herramienta de formateador específica. Como puede ver en la captura de pantalla vinculada, se puede configurar con XML. Por lo tanto, hay un montón de XML prefabricados disponibles para cada trabajador de nuestra empresa, de modo que cuando ingrese un nuevo tipo, lo guiemos por todo el process y configuremos su Eclipse para ellos ( sí, es algo ligeramente malo ), entonces que realmente utiliza los formattings XML que hemos proporcionado. No aplicamos el formatting automático al save, no queremos ser completamente intrusivos, solo queremos impulsar a todos nuestros desarrolladores en las direcciones correctas. Para boost aún más la compatibilidad, utilizamos principalmente reglas definidas en JCC .

Luego viene la parte importante, las construcciones reales. Somos los que adoptamos construcciones automáticas y para eso utilizamos Hudson Continuous Integration Server . Hay dos partes importantes en nuestras configuraciones más allá de esto:

  • Utilizamos CVS loginfo para desencadenar comstackciones cuando algo se comete.
  • Utilizamos varios complementos disponibles para Hudson, incluido el juego de continuous integration junto con el más importante, Checkstyle .

El complemento Checkstyle es el mago en nuestra línea de guía de cumplimiento de estilo de código:

  1. Después de enviar el código a CVS, se activa la compilation de Hudson
  2. Una vez completada la compilation ( todas las testings de unidad pasan, etc. ), Checkstyle inspecciona los files fuente reales
  3. Checkstyle clasifica las reglas basadas en código que hemos definido para él
  4. Continuous Integration Game ve el resultado de Checkstyle y otorga / quita puntos a la persona que tiene la propiedad de la parte relevante del código
  5. La tabla de posiciones muestra un total de puntos por cada commiter en el sistema

Básicamente, esto significa que cuando alguien comete un código desagradable en nuestro CVS, nuestro server de compilation networkinguce automáticamente los puntos de esa persona .

Esto significa que, eventualmente, cualquiera de nosotros puede clasificarse en el Leaderboard en function de la calidad general del código tanto en los principios de look como de OO, como Law of Demeter, Cyclomatic, etc. etc. Naturalmente, esta no es una estadística completamente seria, pero es una buena indicación de que está haciendo algo mal cuando se inicia una compilation en nuestro CI no networkingucirá sus puntos; la mayoría de nuestras confirmaciones valen entre 1 y 5 puntos.

¿Y está funcionando? Más o less, no creo que ninguno de nosotros en mi trabajo escriba código feo o inmanejable y personalmente me gusta cazar todo tipo de puntajes, así que definitivamente me está motivando para hacer un código que se vea bien y siga todos los paradigmas OO que conozco.

¿Y nosotros, como empresa, realmente lo necesitamos? Creo que hacemos lo que debería ver al leer esta respuesta completa, se puede considerar una buena práctica para los avances que trae.


#1 : en una nota relacionada, actualicé el código henetworkingado del 2002 que usaba esos estándares, no parecía "malo" en absoluto, ni siquiera en su forma original y ciertamente no peor en su nueva forma

No en realidad no.

Si realmente puede hacer que funcione de manera consistente y no hacer que el código de la bandera haya cambiado debido a un estilo diferente de colocar el código.

Sin embargo, esto es solo una pequeña parte de los estándares de encoding. No cubrirá declaraciones de devolución múltiples, el uso o no de operadores ternarios, etc.

Siempre es bueno si el coding style que utiliza la tienda es el mismo que también es seguido por las herramientas de desarrollo.

De lo contrario, si hay un gran cuerpo de código que ya sigue un estándar de tienda que NO es el mismo que el de las herramientas, tiene dos opciones:

  1. Modifique todo el código para seguir el estándar de la herramienta, o
  2. Mantener el estándar existente de la tienda.

Muchas tiendas hacen esto último. De todos modos, no es necesario que haya algún tipo de estándar, y es necesario seguirlo.

Algunas herramientas de desarrollo le permiten modificar su estándar. En algunos casos, puede alinear las herramientas con el estándar de la tienda.

Probablemente ya no importa mucho si puedes asegurarte de que todos en el equipo vean el código fuente "correctamente" formateado, lo que crean que sea. Sin embargo, no he visto un sistema que pueda hacer eso: puede hacer partes de él (por ejemplo, reformatear antes y después del check-in / checkout), pero en estos días también debe considerar interfaces web en el control de versiones, sistemas de revisión de códigos externos que interactuar directamente con el sistema de control de versiones, etc.

El objective principal de un estilo de código estándar es (en mi humilde opinión) para garantizar que pueda leer el código de otros miembros del equipo fácilmente sin tener que iniciar la ingeniería inversa, ya que todo el código está escrito utilizando el mismo tipo de principios rectores. La sangría y la colocación entre paréntesis parecen ser una gran distracción en esto, pero son solo una parte muy pequeña y, en mi opinión, algo exagerada y no muy importante de la necesidad de hacer que el código sea consistente.

Lamentablemente, no conozco ninguna herramienta que pueda aplicar automáticamente principios de encoding coherentes al código fuente …

Sí, se necesitan styles de encoding si existe el deseo de tener una base de código homogénea. Dicha base de código puede ser útil para evitar la propiedad individual de partes de la base de código, lo que puede causar problemas cuando las personas abandonan el equipo. Si no puede imaginar tener styles totalmente diferentes y problemas para comprenderlo todo, mire todas las forms en que se puede organizar el text en inglés en varias comunicaciones, todas escritas, pero bastante diferentes, como tweets, correos electrónicos, posts de text, posts instantáneos. , posts de foros, etc. y cambios en fonts, mayúsculas, decoraciones, etc.

Intereting Posts