Marcadores de posición en cadenas

7

Encuentro que a veces uso marcadores de posición en cadenas, como esto:

$ cat example-apache
<VirtualHost *:80>
    ServerName ##DOMAIN_NAME##
    ServerAlias www.##DOMAIN_NAME##
    DocumentRoot /var/www/##DOMAIN_NAME##/public_html
</VirtualHost>

Ahora estoy seguro de que es un problema menor si el marcador de posición es ##DOMAIN_NAME## , !!DOMAIN_NAME!! , {{DOMAIN_NAME}} o alguna otra variante. Sin embargo, ahora necesito estandarizar con otros desarrolladores en un proyecto, y todos tenemos un gran interés en tener nuestro propio formato de marcador de posición estándar en la organización. ¿Hay alguna buena razón para elegir alguno de estos u otros? Estoy tratando de cuantificar estas consideraciones:

  1. Estética y usabilidad . Por ejemplo, __dict__ puede ser difícil de leer ya que no sabemos cuántos guiones bajos hay.
  2. Compatibilidad . ¿Algún lenguaje intentará hacer algo divertido con la sintaxis {} en una cadena (como lo hace PHP con "Welcome to {$siteName} today!" )? En realidad, sé que PHP y Python no, pero otros? ¿Se ahogará un preprocesador de C ++ en formato ## ? Si necesito almacenar el valor en algún motor SQL, ¿no considerará algo como un comentario? ¿Alguna otra trampa a tener en cuenta?
  3. Capacidad de mantenimiento . ¿Se equivocará el chico nuevo ##SOME_PLACEHOLDER## como una construcción de lenguaje?
  4. Lo desconocido . Seguramente la gente sabia aquí pensará en otros aspectos de esta decisión que no he pensado.

Podría ser bikeshedding , pero si hay problemas reales que puedan estar al acecho, entonces me gustaría para conocerlos antes de exigir que nuestros desarrolladores se adhieran a una convención potencialmente problemática.

    
pregunta dotancohen 27.06.2013 - 17:55

3 respuestas

9

Yo mismo uso marcadores de posición, y con los años he sedimentado las siguientes consideraciones, en prioridad descendente:

  • absolutamente ningún metacarácter de shell, porque a menudo uso scripts. Evita: $ < > () {} |
  • no hay secuencias de escape: \
  • no hay caracteres de riesgo de expresión regular, buscando lo que podría ser una pesadilla de escape:. - *? '"
  • no hay operadores comunes y matemáticos: + - / *

Esto deja pocos candidatos:%: ^ # _ @ (donde ^ y% son a menudo operadores y deberían ser excluidos).

Personalmente , uso los últimos tres - # _ @

Las construcciones de lenguaje probablemente conducirían a evitar%, @ y ^ (incluso si @@@ DOMAIN_NAME @@@ es una buena patada en los dientes: no te lo puedes perder).

Usando fuentes de longitud fija, uso indistintamente _ y #. Tal vez estoy más inclinado con __THIS_FORM__ , que es incluso legal en C (¡peligro Robinson! ¡Puede que tengas las constantes de C con ese formato!).

Creo que # es una mejor opción si tienes problemas de legibilidad. ###DOMAIN_NAME### se ve bastante bien y es poco probable que aparezca en cualquier idioma con el que esté familiarizado. Y ###_DOMAIN_NAME_### es más complicado, pero quizás más legible.

Por supuesto, en algunos dominios específicos es posible que desee simular algunos esquemas existentes (por ejemplo, usar metacaracteres de shell), ya sea para aclarar que esas cadenas son realmente marcadores de posición, o porque puede aprovechar ( con el debido cuidado) alguna herramienta para expandirlos: de ahí, por ejemplo, {{ varname }} , ${ varname } , $(varname) o [[ varname ]] .

En scripts como VirtualHosts, tiendo a usar @@@[email protected]@@ ... ¡tal vez no debería haber intentado responder, ya que no puedo ponerme de acuerdo sobre un estándar incluso conmigo mismo!

    
respondido por el LSerni 27.06.2013 - 18:08
3

Eche un vistazo a algunos proyectos que admira y siga su convención.

No invente algo nuevo, intente averiguar qué es una convención típica y vaya con ella.

Asegúrate de incluir una forma de escapar de esa secuencia de caracteres para que puedas incluirla como un literal sin que se interprete como un token.

    
respondido por el M. Dudley 27.06.2013 - 17:57
2

En las semanas transcurridas desde que hice esta pregunta por primera vez, he aprendido qué personajes deben evitar . Los enumero aquí para mi propio uso y para otros:

  • Evite * y _ como software de seguimiento de problemas (como redmine ) use estos para la sintaxis wiki y reemplazarán los valores en los informes de errores copiados y pegados.
  • Bash se ahoga absolutamente con ! , de hecho, ni siquiera puedes subir la flecha para volver atrás y arreglar la línea.
respondido por el dotancohen 18.08.2013 - 12:24

Lea otras preguntas en las etiquetas