Risposta breve: Sì, le stringhe non sono ideali per attività diverse dall'archiviazione e dall'accesso a una sequenza di caratteri testuali, e anche se i bit sottostanti di un'astrazione sono stringhe, ci sono vantaggi nel riferirle come variabili o costanti .
Risposta lunga: la maggior parte delle lingue offre tipi più vicini al dominio del problema e, anche se non lo fanno, probabilmente hanno un metodo con il quale è possibile definire leftun'entità diversa da right(ecc. Ecc.). Trasformarlo in una stringa utilizzando "left"è semplicemente la perdita della lingua e la funzionalità utile di IDE come il controllo degli errori. Anche se devi usare
left = "left";
o qualcosa di equivalente, ha dei vantaggi nell'usare la stringa quando ci si riferisce a tutto il codice. Per esempio,
if (player.direction == Left)
verrebbe rilevato come errore di compilazione (nel migliore dei casi, java e simili) o contrassegnato da qualsiasi IDE degno dei suoi bit come errato (nel peggiore dei casi, di base e simili).
Inoltre, la nozione di leftentità riferibile ti aiuterà a soddisfare qualsiasi direzione decidi di seguire il tipo di direzione. Usando "left", la direzione si impegna a essere a String. Se trovi o crei un'astrazione migliore per il tipo, devi andare a caccia attraverso l'intero corpo del codice cambiando ogni istanza di "left". Una costante o variabile non richiederà alcuna modifica se il tipo viene elaborato.
Il tipo che desideri davvero è particolare per il tuo dominio. Che cosa prevede di fare il tuo codice con il tuo left? Forse vorrai rispecchiare l'asse x di una trama o uno sprite che è rivolto a sinistra o si sposta in avanti; in tal caso, potresti voler creare leftun oggetto con una proprietà o un metodo che rifletta quel comportamento, con l' rightoggetto con il risultato opposto non speculare. Potresti fare quella logica in un oggetto che rappresenta gli sprite o le trame, nel qual caso soffrirai di nuovo per l'uso "left"invece che leftper i motivi sopra indicati.
In Java (e probabilmente in altre lingue che non conosco ancora), enumè una buona alternativa perché in Java enumè utile final classcon un set limitato di istanze. Puoi definire comportamenti se ne hai bisogno e puoi passare a una classe aperta senza problemi al di fuori del file che dichiara il enum, ma molte lingue vedono un enumtipo primitivo o richiedono una sintassi speciale da usare. Ciò perde il enumcappuccio per codice che non ha alcuna attività commerciale e potrebbe essere necessario correggerlo in seguito. Assicurati di comprendere il concetto di lingua enumprima di prendere in considerazione l'opzione.