Risposta breve: Sì, le stringhe non sono l'ideale per qualsiasi attività diversa dall'archiviazione e dall'accesso a una sequenza di caratteri testuali e anche se i bit sottostanti di un'astrazione sono stringhe, ci sono dei vantaggi nel farli riferimento come variabili o costanti .
Risposta lunga: la maggior parte delle lingue offre tipi più vicini al dominio del tuo problema e, anche se non lo fanno, probabilmente hanno un metodo con cui puoi definire left
come un'entità diversa da right
(ecc. ecc.). Trasformarlo in una stringa utilizzando "left"
è semplicemente la perdita del linguaggio e le funzionalità utili dell'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 ad essa attraverso il codice. Ad esempio,
if (player.direction == Left)
verrebbe rilevato come errore in fase di compilazione (best case, java e così via) o essere contrassegnato da qualsiasi IDE che valga i suoi bit come errato (worst case, basic e così via).
Inoltre, avere la nozione di left
come entità referenziabile ti aiuterà ad adattare qualsiasi direzione tu decida di seguire con il tipo di direzione. Utilizzando "left"
, la direzione è impegnata a essere String
. Se trovi o crei una migliore astrazione per il tipo, devi andare a caccia attraverso l'intero corpo del codice modificando ogni istanza di "left"
. Una costante o variabile non richiede modifiche se il tipo è elaborato.
Il tipo che vuoi veramente è specifico per il tuo dominio. Qual è il tuo codice che pianifica di fare con il tuo left
? Forse vorrete specchiare l'asse x di una trama o di uno sprite rivolto verso sinistra o che avanza; in tal caso, potresti voler rendere left
un oggetto con una proprietà o un metodo che rifletta tale comportamento, con il tuo oggetto right
con il risultato opposto non speculare. Si può fare quella logica in un oggetto che rappresenta gli sprite o le trame, nel qual caso di nuovo si soffrirà per l'utilizzo di "left"
invece di left
per i motivi sopra indicati.
In Java (e probabilmente in altri linguaggi che ancora non conosco), enum
è una buona alternativa perché in Java, enum
è utile a final class
con un insieme finito di istanze. Puoi definire i comportamenti se ne hai bisogno e puoi passare a una classe aperta senza problemi al di fuori del file che dichiara enum
, ma molti linguaggi visualizzano un enum
come tipo primitivo o richiedono una sintassi speciale da utilizzare. Che perde il enum
hood per il codice che non ha nulla a che fare con esso e potrebbe dover essere corretto in seguito. Assicurati di aver compreso il concetto della tua lingua di enum
prima di prendere in considerazione l'opzione.