Короткий ответ: Да, строки не идеальны для какой-либо задачи, кроме хранения и доступа к последовательности текстовых символов, и даже если лежащие в основе биты абстракции являются строками, есть преимущество ссылаться на них как на переменные или константы .
Длинный ответ: большинство языков предлагают типы, которые ближе к области вашей проблемы, и даже если они этого не делают, у них, вероятно, есть какой-то метод, с помощью которого вы можете определить 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прежде чем рассматривать вариант.