12. Enums
# 12. Enums
# Declarando un Enum
Cuando declaramos un Enum estamos creando un tipo de dato, al igual que String es el tipo de dato para textos, uint es el tipo de dato para enteros y bool es el tipo verdadero o falso.
Para crear tipo-categoría (Enums) primero declaramos su nombre y sus valores entre llaves, como en el ejemplo a continuación.
enum STATE {INACTIVO, ACTIVO, PRO, CANCELADO}
# Creación y uso de instancias
Como en todas las demás variables, primero pasamos el tipo y luego el nombre. En el ejemplo anterior creamos el tipo STATE (uppercase) y ahora lo instanciaremos dentro de la variable state (lowercase).
A continuación, supongamos que tenemos usuarios registrados en el sistema y un usuario será "marcado" como Activo, para eso creamos una función llamada setToActivo que cambiará la variable de estado a STATE.ACTIVO.
//Instanciando una variable
STATE state;
//Usando Enums
function setToActivo() external {
state = STATE.ACTIVO;
}
Otro ejemplo para cambiar el estado de un usuario: creamos una condición para cambiar solo un usuario a INACTIVO si ya está marcado como ACTIVO.
function cambiarAInactivo() external {
if (state == STATE.ACTIVO) { //Si está activo
state == STATE.INACTIVO; //Cambia a inactivo.
}
}
# Argumento en Funciones
Enums pueden ser pasados como argumentos a las funciones y, como cualquier otro tipo de variable, primero pasamos su tipo como parámetro y luego la variable que contendrá el Enum.
function argumentoEnFuncion(STATE _state) external {
//Puede ser pasado a funciones
}
# Dentro de Structs
A estas alturas, debería haber entendido que un Enum es un tipo de dato como cualquier otro, por lo que puede usarlo incluso dentro de Structs, Mappings o incluso dentro de Arrays.
struct USER {
STATE state;
string nombre;
uint id;
}