Короткий ответ: Да, строки не идеальны для какой-либо задачи, кроме хранения и доступа к последовательности текстовых символов, и даже если лежащие в основе биты абстракции являются строками, есть преимущество ссылаться на них как на переменные или константы .
Длинный ответ: большинство языков предлагают типы, которые ближе к области вашей проблемы, и даже если они этого не делают, у них, вероятно, есть какой-то метод, с помощью которого вы можете определить left
как объект, отличный от right
(и т. Д. И т. Д.). Превращение в строку с помощью"left"
просто лишает языка и полезной функциональности IDE, такой как проверка ошибок. Даже если вам придется использовать
left = "left";
или что-то эквивалентное, у него есть преимущества использования строки, когда вы обращаетесь к ней по всему коду. Например,
if (player.direction == Left)
будет обнаружен как ошибка во время компиляции (в лучшем случае, java и т. д.) или будет помечен любой IDE, которая стоит своих битов как неправильная (в худшем случае, базовая и т. д.).
Кроме того, наличие понятия left
ссылочной сущности поможет вам согласовать любое направление с выбранным типом направления. Используя "left"
, направление стремится бытьString
. Если вы найдете или создадите лучшую абстракцию для этого типа, вам нужно будет изучить весь ваш код, меняя каждый экземпляр "left"
. Константа или переменная не требуют каких-либо изменений, если тип разработан.
Тип, который вы действительно хотите, относится к вашему домену. Что ваш код планирует делать с вашим left
? Возможно, вы захотите отразить ось x текстуры или спрайта, которые направлены влево или движутся вперед; если это так, вы можете создать left
объект со свойством или методом, отражающим это поведение, при этом ваш right
объект будет иметь противоположный результат без зеркального отображения. Вы можете сделать эту логику в объекте, который представляет спрайты или текстуры, и в этом случае вы снова будете страдать за использование "left"
вместо left
причин, указанных выше.
В Java (и, возможно, в других языках, которые я пока не знаю), enum
это хорошая альтернатива, потому что в Java enum
она также полезна final class
с конечным набором экземпляров. Вы можете определить поведения, если они вам нужны, и вы можете переключиться на открытый класс без каких-либо хлопот за пределами файла, который объявляет enum
, но многие языки рассматривают его enum
как примитивный тип или требуют использования специального синтаксиса. Это enum
приводит к утечке кода, который не имеет к нему никакого отношения и, возможно, потребуется исправить позже. Убедитесь, что вы понимаете концепцию вашего языка, enum
прежде чем рассматривать вариант.