Anatomía del código: Funciones en Solidity

Solidity es un lenguaje orientado a objetos y fuertemente tipado, y utilizado para la creación de contratos inteligentes en la blockchain de Ethereum, estos contratos son instrucciones de código, debes de verlos como scripts como si fueran otros lenguajes de programación, por su puesto estos tienen sus diferencias de la web 2.0, la cual es la web tradicionalmente que usamos en nuestra vida cotidiana, este por supuesto es tema de otro post, pero en esta ocasión veremos todo sobre funciones en Solidity, ¿qué son? ¿Cómo definimos una función? ¿Cuáles son las partes de las funciones? Y algunos términos que te ayudarán a entender y a tener siempre a la mano estos conceptos.

¿Qué son las funciones?

Una función es un bloque de código que se ejecutará solo cuando ha sido llamada, o mejor dicho, cuando la ejecutamos. Estas nos ayudan cuando queremos evitar escribir el mismo código que podríamos utilizar en múltiples lugares en nuestras aplicaciones.

Veamos un ejemplo.

Esta es una función en el lenguaje Solidity, esta es una función que suma a dos números, a y b respectivamente, esto por supuesto es un ejemplo muy sencillo, pero nos va a ayudar a explicar cuáles son las partes de una función:

function sum(uint256 a, uint256 b) public pure returns (uint256) {
  uint256 c = a + b;
  return c;
}

¿Cuales son las partes de una función?

Te vamos a dejar una imagen por aquí con las partes de la función y vamos a explicar a continuación cada uno de estos:

1.- Palabra reservada:

En el caso de Solidity es function. Esta es una palabra reservada por el lenguaje, y se refiere a que no podremos utilizarla para nombrar a otras instrucciones en nuestro código, ya que el lenguaje en su programación, sabe que si esta palabra se está usando, es que seguirá la sintaxis y se interpretará como una función.

Otra forma de verlo, es que con esta palabra reservada le diremos al lenguaje que lo siguiente que haremos es definir una función.

2.- Nombre de la función:

Es el nombre que nosotros le asignamos a nuestra función, y como mencionamos en el punto anterior, esta no deberá usar las palabras reservadas por el lenguaje. Con este nombre es que llamaremos a nuestra función en cualquier parte de nuestro código, y OJO, podremos llamar a una función con este nombre solo 1 vez, ya que si el código encontrara dos funciones con el mismo nombre nos arrojará un error. Esto lo podemos evitar usando módulos, solo hay que tener mucho cuidado con esto.

3.- Parámetros:

Son los valores que requerimos en nuestra función para que esta pueda ejecutarse, como dijimos al principio, las funciones nos evitan escribir código repetitivo, en el caso de nuestra función ejemplo sum, necesitamos de dos parámetros a y b, los colocaremos entre paréntesis y separados cada uno separados por una coma.

Solidity es un lenguaje fuertemente tipado, así como lo puedes llegar a ver en TypeScript para JavaScript u otros lenguajes como C++ o Java, por lo que tendremos que indicarle previamente a cada uno de los parámetros el tipo de dato que necesitemos que el usuario nos entregue en el llamado de la función, en el caso de nuestro ejemplo, para ambos parámetros a y b, son de tipo número, y uno de los tipos de datos que tenemos disponibles en solidity para números es el uint256.

Estos pueden llamarse de la manera que queramos, y es mejor que sean lo más descriptivo para que otros desarrolladores no tengan problema en entender y utilizar nuestro código.

4.- Tipo de visibilidad o tipo de función:

Si ya has trabajado con métodos públicos y privados en programación orientada a objetos, esto te va a sonar familiar. Cuando ejecutamos instrucciones de un contrato inteligente desde un cliente, hay métodos como nuestra función sum en las que podemos definir desde dónde podrán ser accedidos, si colocamos public serán visibles y podrán ser ejecutadas desde cualquier ámbito, si escribimos private solo podrán ser ejecutados desde el mismo contrato y no seran visibles por los usuarios para ejecutarlos.

Por supuesto, estas no son las únicas opciones hay otras dos internal y external, dependerá de las necesidades de nuestro contrato para las opciones que elijamos.

5.- Modificador de visibilidad :

Aquí podemos encontrar el cómo se va a comportar la función, lo veo como un «tipado» para el comportamiento, te dejamos el ejemplo de 3 de estos modificadores los cuales son:

view: Para funciones que son de solo lectura del estado de lo que esté guardado en la blockchain, pero no los modifica

pure: Para las funciones que no acceden a ningún valor dentro de la blockchain, por lo que podríamos simplemente regresar siempre un texto que diga chanchito feliz o como el caso de nuestro ejemplo sum, en que en ningún momento accedemos o modificamos nada dentro de nuestro contrato

payable: Las cuales implican que pueden recibir un pago en Ether, la moneda de la blockchain ethereum

Al igual que el puinto anterior, dependerá de las necesidades de nuestros proyectos para que opción usar.

6.- Tipo de retorno o tipado del retorno:

Al igual que con los parámetros, vamos a tener que definir qué tipo de retorno si es que esta es una función que retorna algo por su ejecución, este tema lo veremos un par de puntos más adelante, pero en el caso de nuestra función sum, hace return de la variable c, la cual es de tipo uint256, por lo que debemos especificar que el tipo de retorno será uint256, esto para evitar errores, ya que en la blockchain los errores pueden costarnos criptoactivos, por lo que hay que tener especial cuidado con eso.

7.- Lógica:

Nos referimos con lógica, a todo lo que colocamos en el bloque de código, es decir, toda la sucesión de instrucciones que le indiquemos dentro de este, podremos definir variables, ejecutar otras funciones o modificar valores de variables ya existentes, todo lo que necesitemos para que funcione nuestra app.

Aqui encontramos un tema sumamente interesante, pero, ¿qué es el bloque de código?, en Solidity, el bloque de código en una función está delimitado por las llaves { }

Veamos otra imagen para entenderlo:

Representación del bloque de código en Python

Entonces todo lo que se encuentre dentro este bloque de código se ejecutará cuando llamemos a la función.

8.- Retorno de la Función:

Ya comentamos en el punto anterior que el bloque de código se ejecutará cuando llamemos a la función, pero si necesitamos reutilizar algun valor generado dentro de este bloque de código necesitamos hacer algo más, por ejemplo, la función sumará a + b, y ahora, supongamos que los valores son 1 + 2, el resultado sería 3, y aquí está la clave, la función si nos dará como resultado 3, pero nunca podremos utilizarlo si no hacemos un retorno, esto se hace con la palabra reservada return.

Entonces podremos reutilizar en otro momento todo lo que pongamos delante de return en una función, por ejemplo, podríamos guardar el resultado en cualquier otra variable y reutilizarla en nuestro código cuando lo necesitemos. Este error lo he visto mucho cuando vamos iniciando, ya que en algunas ocasiones no entendemos porque si la función se ejecuta correctamente nunca obtenemos el valor que necesitamos,. Así que no te olvides de colocar el return cuando lo necesites.

Un detalle más sobre esto es que todas las líneas que estén debajo de return no se ejecutarán, entonces esta palabra reservada también nos sirve para terminar la ejecución de la función.

Y recuerda, colocar a return es opcional, ya que no todas las funciones o no todo lo que escribamos en el bloque de código, deberá reutilizarse o retornarse, sino que solamente necesitaremos que ejecute el bloque de código, a estas se les llama funciones void, y son muy comunes y necesarias para construir nuestras aplicaciones, y regresando al punto 6, podremos tipar este retorno de tipo void de la siguiente manera:

function myFunction() public returns (void) {
...
}

¿Cómo llamamos a las funciones?

Ya que hemos definido a nuestras funciones y conocemos las partes que las componen, debemos saber cómo hacemos el llamado, o bien, la ejecución de esta función,:

sum(1, 2)

Vamos a explicar de nuevo las partes que componen al llamado de las funciones:

1.- Nombre de la función: Comenzaremos por utilizar el nombre de la función que queremos llamar, seguido de los argumentos:

2.- Argumentos: Este es el valor o valores que definimos en nuestra función, y los cuales seran utilizados por estos para ejecutar la lógica de su bloque de código, los enviaremos a la función dentro de un parentesis ( ) y cada uno de estos los separaremos por una coma.

Un detalle, es que si no colocamos los paréntesis no estaremos llamando a la función, sino que solo estaremos colocando su definición, así que no olvides colocarlos si necesitas que esta función se ejecute.

Espera espera espera!!! Ahora tal vez te hemos generado una duda o has visto estos 2 términos en diferentes lugares, «argumentos» y «parámetros», pero ¿cómo diferencio o a qué nos referimos con estos?

¿Cuál es la diferencia entre parametros y argumentos?

Verás, la diferencia es sencilla, y está en qué momento nos referimos a estos, ya que con ambos nos referimos a lo que le pasamos a las funciones para que funcionen, pero si estamos hablando de la definición de la función, los llamamos parámetros, pero cuando hagamos el llamado a las funciones se dice que le estamos pasando argumentos a la función, es decir los valores reales para que se ejecute la función.

Entonces, para nuestro ejemplo, la función sum necesita de 2 parámetros para funcionar, los cuales son a y b. Pero cuando la llamemos le estamos pasando como argumentos a 1 y 2.

¿como aprender a programar?

A lo largo de este post hemos de uno de los lenguajes más reconocidos para hacer contratos inteligentes, y esta es una introducción a las funciones como uno de los ejes más importantes cuando aprendemos a programar,

Igualmente, si quieres explorar las partes de una función en este formato, pero de otros lenguajes como lo son

Y hablando de este lenguaje, Solidity es un lenguaje que fue basado en JavaScript y por eso comparte muchos elementos similares, en cuanto a su sintaxis. Y si quieres aprender este lenguaje tedejaremos el link a nuestreo curso: Aprende Javascript, HTML5, CSS3 y NodeJS desde cero y si quieres saber mas sobre tipado tambien contamos con el curso de TypeScript: sin fronteras, pero si no te interasa ninguno de estos pero si otro lenguaje ql cual es de los mas faciles de aprender tenemos el curso Python: HTML, CSS, Flask y MySQL, todos estos cursos y mas los puedes encontrar en la Academia Hola Mundo.

Y esto ha sido todo de este post, si te han ayudado estos conceptos, ¡golpea al botón de me gusta!, déjanos un comentario sobre qué otro tema deberíamos abordar como este post.

Y para no perderte nada, no olvides suscribirte a este blog, seguirnos en todas las redes como Youtube, Twitter e Instagram, y por último, te invitamos a escuchar nuestra música «Hola Beats«, diseñada para ayudarte a concentrarte y acompañarte en tu aprendizaje o trabajo, la puedes encontrar en Spotify y en Apple Music

¡Hasta la próxima!, y chao mundo

Gabriel Hernández

Soy desarrollador fullstack autodidacta y estudié administración en la universidad. Mi stack es principalmente con JavaScript, haciendo frontend con React y Next, y backend con Node y Express. Otras herramientas con las que he trabajado son Python para backend y Solidity para desarrollo de contratos inteligentes.

Comments (4)

Responder a ¿Qué son y qué usos tienen los NFT? – Hola MundoCancelar respuesta

Press ESC to close

Descubre más desde Hola Mundo

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo