-
Em uma linguagem que compila, o valor de uma string mágica é não verificado em tempo de compilação . Se a cadeia de caracteres deve corresponder a um padrão específico, você deve executar o programa para garantir que ele se encaixa nesse padrão. Se você usou algo como um enum, o valor é pelo menos válido em tempo de compilação, mesmo que possa ser o valor errado.
-
Se uma string mágica está sendo escrita em vários lugares você tem que mudar todos eles sem qualquer segurança (como erro em tempo de compilação). Isso pode ser combatido apenas declarando-o em um lugar e reutilizando a variável.
-
Os erros de digitação podem se tornar graves. Se você tem uma função:
func(string foo) { if (foo == "bar") { // do something } }
e alguém acidentalmente digita:
func("barr");
Isso é pior quanto mais raro ou complexo for a string, especialmente se você tiver programadores que não estejam familiarizados com a linguagem nativa do projeto.
-
As cordas mágicas raramente são autodocumentadas. Se você vir uma string, isso não lhe diz nada do que mais a string poderia / deveria ser. Você provavelmente terá que investigar a implementação para ter certeza de que escolheu a string correta.
Esse tipo de implementação é leaky , precisando de documentação externa ou acesso ao código para entender o que deve ser escrito, especialmente porque ele precisa ser perfeito (como no ponto 3).
-
Além das funções "localizar string" nos IDEs, há um pequeno número de ferramentas que suportam o padrão.
-
Você pode coincidentemente usar a mesma string mágica em dois lugares, quando na verdade eles são coisas diferentes, por isso, se você fez um Find & Substituir e mudou ambos, um deles poderia quebrar enquanto o outro funcionava.