En este capítulo, aprenderemos sobre los valores de retorno de las funciónes (return
) y los decoradores de función opcionales.
Para devolver un valor desde una función, la declaración tiene este aspecto:
nameToAge: HashMap[String[64], uint256]
@external
def getAge(name: String[64]) -> uint256:
return self.nameToAge[name]
La función getAge
de arriba devuelve un uint256
que se representa con el símbolo ->
seguido del tipo de retorno, en este caso uint256
.
En un capítulo anterior, exploramos 2 de los decoradores de función: @internal
y @external
.
Hay algunos decoradores de función opcionales más:
Decorador | Descripción |
---|---|
@pure |
La función no lee el estado del contrato o las variables del entorno |
@view |
La función no altera el estado del contrato, pero puede leer el estado del contrato |
@payable |
La función es capaz de recibir Ether |
@nonreentrant(<unique_key>) |
La función solo puede ser llamada una vez durante una llamada externa |
Siguiendo el ejemplo anterior, podemos añadir el decorador @view
en la función getAge
ya que lee el estado del contrato (variable de almacenamiento) pero no lo altera.
nameToAge: HashMap[String[64], uint256]
@view
@external
def getAge(name: String[64]) -> uint256:
return self.nameToAge[name]
Queremos crear una función internal
que no lea o altere el estado del contrato o las variables de entorno (es decir, una función pure
) que devuelva un uint256
.
- Crear una función llamada
_generateRandomDNA
con decoradores de función interna y pura. - La función debe aceptar un parametro de entrada:
_name
de tipoString[32]
. - La función debe devolver un elemento de tipo
uint256
. - Usa la palabra clave
pass
para dejar el cuerpo de la función sin definír.