¿Cuáles son los beneficios frente a los costos de la anotación de comentarios en PHP?

7

Acabo de empezar a trabajar con Symfony2 y he ejecutado las anotaciones de comentarios.

Aunque la anotación de comentario no es una parte inherente de PHP, symfony2 agrega soporte para esta función.

Mi comprensión de los comentarios es que debería hacer que el código sea más inteligible para el ser humano. A la computadora no debería importarle lo que está en los comentarios.

¿Qué beneficios se obtienen al hacer este tipo de anotación en lugar de poner un comando en el código PHP normal?

ie-

/**
 * @Route("/{id}")
 * @Method("GET")
 * @ParamConverter("post", class="SensioBlogBundle:Post")
 * @Template("SensioBlogBundle:Annot:post.html.twig", vars={"post"})
 * @Cache(smaxage="15")
 */
public function showAction(Post $post)
{
}
    
pregunta Patrick 29.11.2012 - 16:00

3 respuestas

6

Hay algunos problemas que vienen inmediatamente a la mente con las anotaciones de comentarios (y, en particular, el formato de symfony2):

  1. Confusión del desarrollador El código que publicaste se ve exactamente como un comentario de documentación de DocBlock. Mientras que los comentarios pueden ser efectivamente intercambiables entre los dos meta-procesadores (cada uno ignorando lo que no entienden, o algunos usando algún otro método para manejar las cosas con gracia), los desarrolladores pueden o no entender el propósito de un comentario dado, especialmente si no están completamente familiarizados con un sistema u otro. Además, abre la puerta para confundir las anotaciones con la documentación, lo que puede llevar a que alguien elimine lo que cree que se supone que es documentación, pero en realidad es un "código".
  2. Conflictos potenciales con el meta-procesador Debido a lo anterior, ¿qué sucede si uno u otro meta-procesador decide ser más estricto y no permite lo que no reconoce? Ahora su procesador se rompe en cada punto concebible. Requerir que dedique tiempo a limpiar y, inevitablemente, perder algo de valor en el proceso (incluido el tiempo y la documentación o las anotaciones). Si se debe hacer en comentarios (ver ventajas), entonces al menos habría optado por un indicador diferente para distinguirlo del estándar de documentación (un buen ejemplo son los comentarios SASS / Compass frente a los comentarios CSS estándar; CSS /**/ comentarios son enviados al CSS compilado, mientras que el compilador ingiere los comentarios que no son de CSS // ; además, hace que sea bastante fácil distinguir entre los dos, simplemente mirando los dos primeros caracteres).
  3. Desenfoque de línea de código / comentario En la programación en general, se supone que el código y los comentarios están separados. El código que debe ejecutarse no debería estar en los comentarios, generalmente por razones obvias (porque no se ejecuta). Luego, comienza a abrir la puerta para hacer otras cosas dentro de los comentarios, lo que podría hacer que la capacidad de comentar sea real o tener que saltar a través de otros aros para distinguir entre el código en el comentario y los comentarios reales (lo que también aumentará el tiempo / los recursos de compilación). el compilador tiene que pasar por más comentarios y determinar si son significativos, en lugar de simplemente ignorarlos a todos). Otras alternativas que encontré con un vistazo rápido a los comentarios sobre la anotación de Symfony, incluyen el estilo de C # de los corchetes angulares alrededor de las anotaciones, el estilo decorador de Python (básicamente lo que Symfony ya tiene, pero no los comentarios), y probablemente casi cualquier otro estilo Sería superior a hacerlo dentro de los comentarios. (O, para decirlo de otra manera, Viola el "No necesito buscar en los comentarios para encontrar la fuente de los errores". "regla. )

Dicho esto, hacer algo como esto no deja de tener sus ventajas.

  1. Agregar funcionalidad que no está disponible de forma nativa en el idioma. En primer lugar, probablemente esta sea la razón por la que Symfony lo hace de esta manera. PHP no tiene decoradores / anotaciones y, por lo tanto, si desea esa característica, tiene que encontrar una manera de implementarla. Aún más, si lo desea y no quiere que sus usuarios dependan de las extensiones de PHP (porque no siempre pueden controlar ese nivel de su entorno), tiene que encontrar una manera de hacerlo internamente que no se rompa El compilador de PHP. Los comentarios son la opción obvia.

  2. Proporcione una forma limpia de agregar varias funciones a segmentos específicos. Si he visto las anotaciones / decoradores más es Python, pero probablemente lo verá en una serie de otros Idiomas, si los usas. Por ejemplo, CherryPy lo usa para exponer funciones como controladores de páginas web (es decir, se puede acceder a una función con un decorador específico mediante un navegador, de la misma manera que se accede a ciertas funciones públicas en los controladores PHP). Básicamente, proporcionan una capacidad de "extensión" a funciones o clases, ofreciendo funciones de utilidad sin saturar el código dentro de la función.

Desafortunadamente, no sé lo suficiente sobre Symfony para señalar a otros con el formato de Symfony, pero hay una larga discusión de las ventajas y desventajas de esto en este hilo Hacker News en el que podría estar interesado. También podría estar interesado en la solicitud de cambio en el sitio PHP para anotaciones nativas.

    
respondido por el Shauna 29.11.2012 - 17:32
1

A mi me parece una muy mala práctica. Podría obtener el mismo resultado con las funciones meta que devuelven este tipo de metadatos en funciones, como showAction__META () para el ejemplo anterior, pero evite todas las desventajas, y hay muchas de ellas. La necesidad de leer el código fuente solo para ejecutarlo, lo que pone en la cabeza las optimizaciones del compilador / tiempo de ejecución. Tampoco es directamente comprobable, y necesita un cuidado especial al realizar las comprobaciones de sintaxis. Es el mismo enfoque estúpido de reinventar la rueda que toman varios lenguajes de plantillas, en lugar de usar PHP directamente.

    
respondido por el Andris 02.05.2018 - 16:47
0

Los costos pueden descuidarse efectivamente ya que esto se traduce de hecho al código PHP y luego se almacena en caché. Por lo tanto, a menos que cambie el código a menudo, simplemente ejecuta el código PHP (que en teoría podría ser un código más rápido que el que escribiría de forma manual)

La razón para hacerlo es que esta es una forma agradable y compacta de proporcionar esta información al sistema, estas 5 líneas requerirán, escritas en PHP unas pocas líneas más y se ajustarán muy bien a lo que se relaciona.

En el lado negativo, cada abstracción tiene un costo y agrega una fuente para nuevos errores (¿qué sucede si el analizador tiene un error o genera un código con errores?)

    
respondido por el johannes 29.11.2012 - 16:13

Lea otras preguntas en las etiquetas