Contenido del curso
Contenido del curso
Kevin Fiorentino
Dany R
Fabricio Dupraz
Guillermo Leonardo Rossi
Nilson Diaz
EnumerableSet y EnumerableMap extienden la funcionalidad de los Arrays y Mapping en Solidity, ya que estos son algo limitados para obtener la longitud, verificar si un valor existe, etc. Deben utilizar cuando el funcionamiento de los Arrays o Mapping no satisface nuestro caso de uso y requerimos de más funcionalidad. Son librerías con funciones estáticas, como en la POO, donde no se requiere instanciar una clase para utilizar sus métodos.
EnumerableSet crea un tipo de “Array dinamico” al que se le llama Set, a este tipo de “Array” se le ha agregado las siguientes propiedades:
💡 IMPORTANTE!!! Al remover un elemento, el último valor del Set pasa a ocupar la posición del elemento eliminado P.E.
values() //Retorna el Set (array) almacenado [10,20,30,40,50] at(50) //Retorna 4, ya que es la posicion de 50 remove(20) //Elimino el elemento 20 values() //Retorna un nuevo Set (array) [10,50,30,40] at(50) //Retorna 2, la posicion de 50 cambio
EnumerableSet esta definida para trabajar con 3 tipos de variables:
Las funciones que agrega EnumerableSet son:
Para usar EnumerableSet con using_for_ a parte de importar la librería, se debe declarar la un tipo de variable Set de la siguiente forma:
contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; }
Ejemplos basicos para usar EnumerableSet y EnumerableMAp AQUI
Habría que ver el consumo de gas al implementar esto. Creería que la diferencia es mucha.
existe alguna estandar en el nombre de las funciones q comienzan con _ y las q no? he viste que algunas veces los contratos tiene las 2 por ejemplo _add y add.
Hey ! Buena observacion , esto se debe a que el "underscore" es mas una convencion en programacion, el que tenga el _ al inicio significa que es una funcion "protegida" o "interna" que solo puede/deberia usarse de forma interna en el contracto o en algun derivado. digo que puede o deberia ya que en algunos lenguajes si toman en cuenta esto para asignarle dicha restriccion al llamado de la funcion como en python pero en otros como solidity esto no es mas que una buena practica al escribir los nombres , ya que podemos lograr este mismo comportamiento de restringir el accesso a la funcion con la keyword "internal" despues de los parametros
espero te ayude !