Onde devo definir constantes nos scripts?

8

Ao escrever scripts usando uma linguagem de script moderna, por exemplo, Powershell ou JavaScript, onde devo definir constantes? Devo tornar todas as constantes globais para facilitar a leitura e facilitar o uso, ou faz sentido definir constantes o mais próximo possível dos seus escopos (em uma função, por exemplo, se não for necessária em outro lugar)? Estou pensando principalmente em mensagens de erro, IDs de erro, caminhos para recursos ou opções de configuração.

bshacklett
fonte

Respostas:

12

Os consts são bons apenas para fornecer nomes descritivos de variáveis ​​para evitar problemas com números mágicos , mas causam um problema igualmente irritante de não ser capaz de identificar o valor realmente usado quando a const é definida longe de seu uso.

Minha sugestão, em todos os idiomas: defina consts no escopo o mais próximo possível do uso real. Se usado em apenas uma classe; colocar apenas nessa classe. Várias classes significariam ter certeza de que estão no mesmo espaço de nomes que todas as classes que o utilizam.

Em javascript, isso significa o escopo lexicamente mais próximo de todos os usos.

Jimmy Hoffa
fonte
they cause a similarly annoying problem of not being able to identify the value actually being usedOs IDEs não deveriam ter uma "ir para a definição" ou poder visualizar o valor como qualquer outra var? Os metadados são mais difíceis para scripts, suponho.
StuperUser
1
Normalmente, não se está usando um IDE para criar scripts de shell. E mesmo quando alguém é de natureza dinâmica, não se presta a reformular o estilo de ferramentas "vá para a definição".
Wyatt Barnett
1
@StuperUser Eu sou um VS StuperUser há 12 anos, então sou a favor do uso das ferramentas disponíveis, mas acho que uma abordagem melhor no design é pensar em como o código pode ser o mais sustentável sem as ferramentas possíveis, isso empresta projetar conceitos úteis em idiomas com menos ferramentas e geralmente não afeta a utilidade das ferramentas, se disponíveis. Às vezes, as ferramentas podem facilitar a manutenção de projetos ruins, e é por isso que a confiança nas ferramentas geralmente é reduzida.
Jimmy Hoffa
similarly annoying problem of not being able to identify the value actually being usedNão é necessário verificar com muita frequência que GRAVITATIONAL_ACCELERATIONé 9,80665. Depois que uma constante é definida, você deve abstrair-se do valor e pensar no nome da coisa.
Tulains Córdova 27/10/12
1

Em vez de usar constantes, você pode usar um arquivo de configuração. O JavaScript permite que você tenha arquivos facilmente analisáveis ​​no formato json. Eu não sei sobre o PowerShell.

Os arquivos de configuração têm a vantagem de serem centralizados, mas o nome da propriedade no escopo da função (quando você a recupera) permite manter a legibilidade.

Florian Margaine
fonte
Às vezes isso pode ser um exagero. Especialmente se o valor for usado apenas internamente no código e não for exibido ao usuário. Prefiro manter meus arquivos de configuração mínimos, para facilitar a instalação do aplicativo.
David Hogue