Krótka odpowiedź: Tak, ciągi nie są idealne do zadań innych niż przechowywanie i uzyskiwanie dostępu do sekwencji znaków tekstowych, a nawet jeśli leżącymi u podstaw bitami abstrakcji są ciągi znaków, odniesienie ich jako zmiennych lub stałych jest korzystne .
Długa odpowiedź: większość języków oferuje typy, które są bliżej dziedziny twojego problemu, a nawet jeśli nie, prawdopodobnie mają jakąś metodę, dzięki której możesz zdefiniować leftjako byt inny niż right(itp. Itp.). Przekształcenie go w ciąg za pomocą "left"jest po prostu przepadkiem języka i pomocnej funkcji IDE, takiej jak sprawdzanie błędów. Nawet jeśli musisz użyć
left = "left";
lub coś równoważnego, ma tę zaletę, że używa łańcucha, gdy odwołujesz się do niego w całym kodzie. Na przykład,
if (player.direction == Left)
zostanie wykryty jako błąd czasu kompilacji (najlepszy przypadek, java itp.) lub oznaczony przez dowolne IDE warte swoich bitów jako zły (najgorszy przypadek, podstawowy itp.).
Ponadto posiadanie pojęcia bycia leftodniesieniem pomoże ci dostosować się do dowolnego kierunku, w którym zdecydujesz się pójść z typem kierunku. Używając "left", kierunek jest zobowiązany do bycia String. Jeśli znajdziesz lub utworzysz lepszą abstrakcję dla tego typu, musisz przejść do przeszukiwania całego kodu, zmieniając każde wystąpienie "left". Stała lub zmienna nie będzie wymagać żadnych zmian, jeśli typ zostanie opracowany.
Typ, który naprawdę chcesz, jest specyficzny dla Twojej domeny. Co planuje zrobić z twoim kodem left? Być może będziesz chciał wykonać kopię lustrzaną osi x tekstury lub duszka skierowanego w lewo lub poruszającego się do przodu; jeśli tak, możesz chcieć utworzyć leftobiekt za pomocą właściwości lub metody, która odzwierciedla to zachowanie, a twój rightobiekt ma przeciwny wynik bez dublowania. Możesz wykonać tę logikę w obiekcie reprezentującym duszki lub tekstury, w którym to przypadku ponownie będziesz cierpieć z powodu używania "left"zamiast z leftpowodów wymienionych powyżej.
W Javie (i prawdopodobnie w innych językach, których jeszcze nie znam) enumjest dobrą alternatywą, ponieważ w Javie enumjest równie przydatna, jak final classze skończonym zestawem instancji. Możesz zdefiniować zachowania, jeśli ich potrzebujesz, i możesz przejść do otwartej klasy bez żadnych kłopotów poza plikiem, który deklaruje enum, ale wiele języków postrzega enumjako prymitywny typ lub wymaga specjalnej składni. To przecieka enumkod do kodu, który nie ma z tym nic wspólnego i może wymagać późniejszej korekty. enumPrzed rozważeniem tej opcji upewnij się, że rozumiesz koncepcję swojego języka .