3. Funciones

Las funciones se utilizan para encapsular fragmentos de código que serán llamados/invocados siempre que sea necesario, evitando así la necesidad de reescribirlos.

# Algunas definiciones

  • Tienen una palabra clave de definición.
  • Un nombre para ser invocadas.
  • Pueden recibir parámetros externos.
  • Tienen un parámetro de visibilidad.
  • Tienen un identificador de estado.
  • Pueden recibir modificadores.
  • Pueden ser pagaderas (recibir ETH/crypto).
  • Pueden o no devolver datos.

# El cuerpo de una función

function nombreFuncion(parámetro 1, parámetro 2) visibilidad de estado {
  //Cuerpo de la función
}

Esta estructura puede variar según el contexto de la función. Algunas palabras clave estarán implícitas por defecto en el idioma.

# Parámetros

Las funciones pueden tomar parámetros externos. Vea la función a continuación.

function suma(uint a, uint b) external pure returns(uint) {
  return a + b;
}

Por ahora, solo preste a los parámetros dentro de los paréntesis (uint a, uint b). Este fragmento de código indica que esta función toma dos números, uno está en la variable 'a' y el otro está en la variable 'b'.

# Sin Parámetros

Las funciones también pueden funcionar sin parámetros externos, como es el caso de la siguiente función, que solo devuelve el número de bloque actual.

function bloqueActual() external view returns(uint) {
  return block.number;
}

# Visibilidad

Los parámetros de visibilidad definen cómo se puede acceder a la función.

external -> Función visible solamente "por fuera" del contrato.

internal -> Función visible dentro del contrato y por otros derivados de este.

public -> Función visible tanto internamente del contrato, como externamente.

private -> Función visible únicamente por el contrato principal (que contiene esta función).

# Estados

Cuando se ejecuta una función, puede o no cambiar los datos almacenados en la blockchain. Para cada caso hay una palabra clave que define los permisos y posibilidades de esta función.

view -> Función que no altera datos, únicamente lee.

pure -> Función que ni altera, ni lee.

pure se usa a menudo para hacer cálculos y devolver resultados.

# Modificadores

Hay muchos casos de uso para los modificadores, pero uno de los más comunes es establecer permisos y restricciones en el contrato para que solo el administrador pueda hacer realizar acciones.

function soloAdminAlteraEdad(uint nueva_edad) external soloAdmin() returns(uint) {
  mi_edad = nueva_edad;
  return mi_edad;
}

modifier soloAdmin {
  require(msg.sender == cartera_admin);
  _;
}

En este caso tenemos una función llamada soloAdminAlteraEdad que solo se puede ejecutar si el modificador soloAdmin devuelve el valor de true. Este modificador comprueba si la dirección que llamó al contrato es la dirección del administrador, y en caso afirmativo, devolverá verdadero y se ejecutará la función.

# Funciones pagaderas (Payable)

Algunas funciones pueden recibir eth y otros tokens y para eso deben tomar la palabra clave payable.

function invertir() external payable {
  //Cuerpo de la función
}

Las funciones con el parámetro de estado view no se pueden pagar.

# Return e Returns

Para que una función retorne algún dato, es necesario especificar el tipo de dato que devolverá, y esto se hace a través del parámetro returns, el cual es diferente de la palabra clave return que se utiliza para retornar datos de manera directa.

function saldo() external view returns(uint) {
  return saldos[msg.sender];
}
Last Updated: 9/10/2022, 4:27:54