Solidez - Bibliotecas
Las bibliotecas son similares a los contratos, pero están destinadas principalmente a la reutilización. Una biblioteca contiene funciones que otros contratos pueden llamar. Solidity tiene ciertas restricciones sobre el uso de una biblioteca. A continuación se presentan las características clave de una biblioteca de solidez.
Las funciones de la biblioteca se pueden llamar directamente si no modifican el estado. Eso significa que las funciones puras o de visualización solo se pueden llamar desde fuera de la biblioteca.
La biblioteca no se puede destruir ya que se supone que no tiene estado.
Una biblioteca no puede tener variables de estado.
Una biblioteca no puede heredar ningún elemento.
Una biblioteca no se puede heredar.
Ejemplo
Pruebe el siguiente código para comprender cómo funciona una biblioteca en Solidity.
pragma solidity ^0.5.0;
library Search {
function indexOf(uint[] storage self, uint value) public view returns (uint) {
for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
return uint(-1);
}
}
contract Test {
uint[] data;
constructor() public {
data.push(1);
data.push(2);
data.push(3);
data.push(4);
data.push(5);
}
function isValuePresent() external view returns(uint){
uint value = 4;
//search if value is present in the array using Library function
uint index = Search.indexOf(data, value);
return index;
}
}
Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.
Note - Seleccione Prueba en el menú desplegable antes de hacer clic en el botón de implementación.
Salida
0: uint256: 3
Usando para
La directiva using A for B; se puede usar para adjuntar funciones de biblioteca de la biblioteca A a un tipo B dado. Estas funciones usarán el tipo de llamador como su primer parámetro (identificado usando self).
Ejemplo
Pruebe el siguiente código para comprender cómo funciona una biblioteca en Solidity.
pragma solidity ^0.5.0;
library Search {
function indexOf(uint[] storage self, uint value) public view returns (uint) {
for (uint i = 0; i < self.length; i++)if (self[i] == value) return i;
return uint(-1);
}
}
contract Test {
using Search for uint[];
uint[] data;
constructor() public {
data.push(1);
data.push(2);
data.push(3);
data.push(4);
data.push(5);
}
function isValuePresent() external view returns(uint){
uint value = 4;
//Now data is representing the Library
uint index = data.indexOf(value);
return index;
}
}
Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.
Note - Seleccione Prueba en el menú desplegable antes de hacer clic en el botón de implementación.
Salida
0: uint256: 3