12. Enums
Servem para categorização de variáveis. Ao invés de gerenciarmos categorias de variáveis através de mappings usamos Enums por serem mais baratos. Veja alguns exemplos abaixo.
# Declarando Enum
Quando declaramos um Enum estamos criando um tipo de dado, assim como string é o tipo de dado para textos, uint é o tipo de dado para inteiros e bool é o tipo verdadeiro ou falso.
Para criar tipo-categoria (Enums) declaramos primeiro seu nome e dentro de chaves os seus valores, como no exemplo abaixo.
# Instanciando e Utilizando
Como todas as outras variáveis nós primeiros passamos o tipo e depois o nome. No exemplo anterior criamos o tipo STATE (uppercase) e agora iremos instancia-lo dentro da variável **state(lowercase).
Em seguida, suponhamos que temos usuários cadastrados no sistema e um usuário será "marcado" como Ativo, para isso criamos uma função chamada setToAtivo que irá alterar a variável state para STATE.ATIVO
Outro exemplo para alterar o estado de um usuário, criamos uma condição para somente mudar um usuário para INATIVO caso ele já esteja marcado como ATIVO.
# Argumento em Funções
Enums podem ser passados como argumentos para funções e assim como qualquer outro tipo de variável primeiros passamos como parâmetro o seu tipo e depois a variável que conterá o Enum.
# Dentro de Structs
A essa altura você deve ter entendido que um Enum é um tipo de dado como outro qualquer então você pode utiliza-lo até mesmo dentro de Structs, Mappings ou ainda dentro de Arrays.