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