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