¿Dónde debo definir constantes en los scripts?

8

Al escribir secuencias de comandos utilizando un lenguaje de secuencias de comandos moderno, por ejemplo, Powershell o JavaScript, ¿dónde debo definir las constantes? ¿Debo hacer que todas las constantes sean globales para facilitar la lectura y la facilidad de uso, o tiene sentido definir constantes tan cerca de sus alcances como sea posible (en una función, por ejemplo, si no se necesita en otro lugar)? Estoy pensando principalmente en mensajes de error, ID de error, rutas a recursos u opciones de configuración.

bshacklett
fuente

Respuestas:

12

Los consts son buenos solo para dar nombres descriptivos de variables para evitar los problemas de números mágicos , pero causan un problema igualmente molesto de no poder identificar el valor que realmente se usa cuando el const se define fuera de su uso.

Mi sugerencia, en todos los idiomas: defina consts en el mayor alcance posible a su uso real. Si se usa en una sola clase; solo poner en esa clase. Varias clases significarían asegurarse de que esté al menos en el mismo espacio de nombres que todas las clases que lo usan.

En javascript, esto significa un alcance léxico lo más cercano posible a todos los usos.

Jimmy Hoffa
fuente
they cause a similarly annoying problem of not being able to identify the value actually being used¿No deberían los IDE tener un "ir a definición" o ser capaces de obtener una vista previa del valor como cualquier otra var? Los metadatos son más difíciles de guiones, supongo.
StuperUser
1
Por lo general, uno no está usando un IDE para construir scripts de shell. E incluso cuando uno es dinámico, la naturaleza no se presta a herramientas de "ir a la definición" de estilo de intercambio.
Wyatt Barnett
1
@StuperUser Soy un StuperUser de VS que llevo 12 años, así que estoy dispuesto a usar las herramientas disponibles, pero creo que un mejor enfoque en el diseño es pensar en cómo el código puede ser tan fácil de mantener sin las herramientas como sea posible, esto presta para diseñar conceptos útiles en todos los idiomas con menos herramientas y, por lo general, no tiene ningún efecto sobre la utilidad de las herramientas si están disponibles. A veces, las herramientas pueden hacer que los malos diseños sean fáciles de mantener, por lo que la dependencia de las herramientas a menudo se critica.
Jimmy Hoffa
similarly annoying problem of not being able to identify the value actually being usedNo es necesario verificar muy a menudo que GRAVITATIONAL_ACCELERATIONes 9.80665. Una vez que se establece una constante, debe abstraerse para el valor y pensar en el nombre de la cosa.
Tulains Córdova
1

En lugar de usar constantes, puede usar un archivo de configuración. JavaScript le permite tener archivos fácilmente analizables en formato json. No sé sobre PowerShell.

Los archivos de configuración tienen la ventaja de estar centralizados, aunque el nombre de la propiedad en el alcance de la función (cuando la recupera) le permite mantener la legibilidad.

Florian Margaine
fuente
A veces eso puede ser excesivo. Especialmente si el valor solo se usa internamente para el código y no se muestra al usuario. Prefiero mantener mis archivos de configuración mínimos para que la aplicación sea más fácil de configurar.
David Hogue