Respuesta corta: Sí, las cadenas no son ideales para ninguna otra tarea que no sea almacenar y acceder a una secuencia de caracteres textuales, e incluso si los bits subyacentes de una abstracción son cadenas, hay ventajas en hacer referencia a ellas como variables o constantes .
Respuesta larga: la mayoría de los idiomas ofrecen tipos que están más cerca del dominio de su problema, e incluso si no lo hacen, probablemente tengan algún método por el cual puede definir left
como una entidad diferente de right
(etc., etc.). Convertirlo en una cadena mediante el uso "left"
es simplemente la pérdida del idioma y la funcionalidad útil del IDE, como la verificación de errores. Incluso si tienes que usar
left = "left";
o algo equivalente, tiene ventajas al usar la cadena cuando se refiere a ella a través de su código. Por ejemplo,
if (player.direction == Left)
se detectaría como un error en tiempo de compilación (el mejor de los casos, java y tal) o sería marcado por cualquier IDE que valga sus bits como incorrecto (el peor de los casos, básico y tal).
Además, tener la noción de left
entidad referenciable lo ayudará a adaptarse a cualquier dirección que decida ir con el tipo de dirección. Al usar "left"
, la dirección se compromete a ser a String
. Si encuentra o crea una mejor abstracción para el tipo, debe buscar todo el cuerpo del código cambiando cada instancia de "left"
. Una constante o variable no requerirá ningún cambio si se elabora el tipo.
El tipo que realmente desea es particular para su dominio. ¿Qué planea hacer tu código con tu left
? Tal vez desee reflejar el eje x de una textura o sprite que se enfrenta a la izquierda o se mueve hacia adelante; si es así, es posible que desee hacer left
un objeto con una propiedad o método que refleje ese comportamiento, con su right
objeto teniendo el resultado opuesto no reflejado. Podría hacer esa lógica en un objeto que represente los sprites o texturas, en cuyo caso nuevamente sufrirá por usar en "left"
lugar de left
por las razones indicadas anteriormente.
En Java (y probablemente en otros lenguajes que aún no conozco), enum
es una buena alternativa porque en Java enum
es tan útil como final class
con un conjunto finito de instancias. Puede definir comportamientos si los necesita, y puede cambiar a una clase abierta sin problemas fuera del archivo que declara el enum
, pero muchos idiomas ven un enum
tipo primitivo o requieren una sintaxis especial para usar. Eso filtra el enum
capó al código que no tiene nada que ver con eso y es posible que deba corregirse más adelante. Asegúrese de comprender el concepto de idioma de su enum
antes de considerar la opción.