Penso che uno degli usi più comuni di erlang sia quello di taggare variabili e messaggi, con il vantaggio del confronto veloce (pattern match) come dice mipadi.
Ad esempio, si scrive una funzione che potrebbe non riuscire in base ai parametri forniti, lo stato della connessione a un server o qualsiasi motivo. Un utilizzo molto frequente è di restituire una tupla {ok, Valore} in caso di successo, {errore, motivo} in caso di errore. La funzione di chiamata avrà la possibilità di gestire solo la codifica del caso di successo {ok,Value} = yourModule:yourFunction(Param...)
. Facendo questo è chiaro che consideri solo il caso di successo, estrai direttamente il valore dalla funzione return, è veloce, e non devi condividere alcuna intestazione con yourModule per decodificare l'atomo ok.
Nel messaggio ti capiterà spesso di vedere le cose come {add,Key,Value}
, {delete,Key}
, {delete_all}
, {replace,Key,Value}
, {append,Key,Value}
... Si tratta di messaggi espliciti, con gli stessi vantaggi come accennato prima: veloce, sensibile, non la quota di intestazione ...
Perché è utile avere un tipo enum in molte altre lingue? Quando hai bisogno di un simbolo per rappresentare un valore che * è * quel simbolo, perché la semantica del simbolo stesso è importante - allora vuoi gli atomi. Un enum è un modo per implementarlo, gli atomi di Erlang sono un altro.Sono più concisi e soggetti a molte meno restrizioni imposte dall'implementazione, e non si espongono agli hack in quanto "in C tutto è un intero sotto". – zxq9