Resposta curta: Sim, as strings não são ideais para nenhuma tarefa além de armazenar e acessar uma sequência de caracteres textuais e, mesmo que os bits subjacentes de uma abstração sejam strings, há benefícios em referenciá-los como variáveis ou constantes .
Resposta longa: a maioria dos idiomas oferece tipos que estão mais próximos do domínio do seu problema e, mesmo que não, eles provavelmente possuem algum método pelo qual você pode definir left
como uma entidade diferente de right
(etc etc). Transformar isso em uma string usando "left"
é simplesmente perda da linguagem e da funcionalidade útil do IDE, como verificação de erro. Mesmo se você precisar usar
left = "left";
ou algo equivalente, ele tem vantagens em usar a string quando você se refere a ela em seu código. Por exemplo,
if (player.direction == Left)
seria detectado como um erro em tempo de compilação (na melhor das hipóteses, java e outros) ou seria sinalizado por qualquer IDE que tivesse seus bits como errado (na pior das hipóteses, básico e tal).
Além disso, ter a noção de left
uma entidade referenciável o ajudará a acomodar qualquer direção que você decidir seguir com o tipo de direção. Ao usar "left"
, a direção está comprometida em ser a String
. Se você encontrar ou criar uma abstração melhor para o tipo, precisará procurar por todo o corpo do código, alterando cada instância de "left"
. Uma constante ou variável não exigirá nenhuma alteração se o tipo for elaborado.
O tipo que você realmente deseja é específico para o seu domínio. O que seu código está planejando fazer com o seu left
? Talvez você queira espelhar o eixo x de uma textura ou sprite que esteja voltado para a esquerda ou avance; left
Nesse caso, convém criar um objeto com uma propriedade ou método que reflita esse comportamento, com o right
objeto tendo o resultado não espelhado oposto. Você pode fazer essa lógica em um objeto que representa os sprites ou texturas; nesse caso, novamente, você sofrerá o uso, em "left"
vez de left
pelos motivos mencionados acima.
Em Java (e provavelmente em outras linguagens que ainda não conheço), enum
é uma boa alternativa porque, em Java, enum
é tão útil quanto final class
em um conjunto finito de instâncias. Você pode definir comportamentos, se precisar deles, e pode mudar para uma classe aberta sem aborrecimentos fora do arquivo que declara o enum
, mas muitos idiomas vêem isso enum
como um tipo primitivo ou requerem sintaxe especial para usar. Isso vaza o enum
código para o código que não tem nada a ver com ele e pode precisar ser corrigido posteriormente. Certifique-se de entender o conceito de um idioma enum
antes de considerar a opção.