CursosEmpresasBlogLiveConfPrecios

Cómo implementar funciones en Solidity

Clase 9 de 21 • Curso de Introducción a Solidity

Clase anteriorSiguiente clase

Contenido del curso

Por qué debes aprender Solidity

  • 1
    Curso de Solidity: Fundamentos y Desarrollo en Blockchain

    Curso de Solidity: Fundamentos y Desarrollo en Blockchain

    01:24 min
  • 2
    Programación en Solidity para Contratos Inteligentes en Blockchain

    Programación en Solidity para Contratos Inteligentes en Blockchain

    03:23 min

Introducción a la programación con Solidity

  • 3
    Estructura Básica de Contratos en Solidity

    Estructura Básica de Contratos en Solidity

    10:29 min
  • 4
    Tipos de datos y variables en Solidity: enteros, booleanos y direcciones

    Tipos de datos y variables en Solidity: enteros, booleanos y direcciones

    12:38 min
  • 5
    Estructuras y Arrays en Contratos Inteligentes

    Estructuras y Arrays en Contratos Inteligentes

    09:20 min
  • 6
    Estructuras de datos en Solidity: Mappings y enums

    Estructuras de datos en Solidity: Mappings y enums

    11:53 min
  • 7
    Estructuras de control en Solidity

    Estructuras de control en Solidity

    10:48 min
  • 8
    Manejo de Eventos con Solidity

    Manejo de Eventos con Solidity

    05:29 min

Programación de Funciones en Solidity

  • 9
    Cómo implementar funciones en Solidity

    Cómo implementar funciones en Solidity

    Viendo ahora
  • 10
    Uso de Modificadores en Solidity

    Uso de Modificadores en Solidity

    08:41 min
  • 11
    Manejo de errores

    Manejo de errores

    07:35 min

Gestionando costos de gas y comisiones

  • 12
    Tipos de almacenamiento

    Tipos de almacenamiento

    05:17 min
  • 13
    Manejo del gas y comisiones

    Manejo del gas y comisiones

    08:37 min
  • 14
    Transferencias de ether desde un contrato

    Transferencias de ether desde un contrato

    09:47 min
  • 15
    Recibir ether desde un contrato

    Recibir ether desde un contrato

    11:50 min

Conceptos avanzados de Solidity

  • 16
    Manejo de dependencias y librerías

    Manejo de dependencias y librerías

    08:12 min
  • 17
    Uso de la herencia en Solidity

    Uso de la herencia en Solidity

    14:41 min
  • 18
    Polimorfismo en contratos inteligentes

    Polimorfismo en contratos inteligentes

    09:05 min
  • 19
    Tokens

    Tokens

    13:34 min
  • 20
    Application Binary Interface (ABI)

    Application Binary Interface (ABI)

    06:50 min

Cómo continuar mi camino desarrollando en Blockchain

  • 21
    Cómo continuar mi camino con Solidity

    Cómo continuar mi camino con Solidity

    01:58 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
        Ernesto García

        Ernesto García

        teacher•
        hace 4 años

        Funciones

        Son piezas de código definidas por un nombre, parámetros y modificadores.

        function <name>(<type> <parameter>..., [..., ]>) <access modifiers> <mutability modifiers> <user defined modifiers> <returns>(<type>) { <content> }
        • name: Nombre de la función
        • type: Tipo de dato
        • parameter: Nombre del parámetro
        • access modifier: public, private, internal, external
        • mutability modifier: view, pure. Ambas hacen que la función no cobre gas, y si se omite, se asume que es una función que escribe en el storage de la EVM
        • user defined modifiers: Son modificadores definidos por el usuario, son opcionales y se presentan en la siguiente clase
        • returns: Indica que la función retornará uno o más datos
        Pepe Sosa

        Pepe Sosa

        student•
        hace 4 años

        Algunos puntos a pulir:

        • Las funciones pure. No leen ni modifican variables de estado y tampoco usan ninguna variable global.
        • Existen funciones payable. Estas se usan cuando la función envía ether a alguna dirección en la blockchain. Solo las funciones con tipo de retorno “payable” están habilitadas para enviar ether.

        Convenciones no obligatorias

        • En el desarrollo Solidity existe una convención no obligatoria y es que todos los parámetros de una función empiecen con guión bajo.
        function Suma( uint _numero1, uint _numero2 ) public pure returns (uint) { return sumaInterna(_numero2, _numero2); }

        Como digo, es solo una convención no obligatoria pero si pretendemos entrar a este mundo hay que seguir las convenciones.

          Rafael Carpio

          Rafael Carpio

          student•
          hace 4 años

          siempre estas comentando cosas buenas, eres un programador profesional?

        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        student•
        hace 4 años

        Tipos de función

        • public: son accesibles desde todo ámbito posible.
        • private: solo son accesibles desde el mismo contrato.
        • internal: solo son accesibles desde el mismo contrato y sus contratos derivados.
        • external: solo accesibles desde fuera del contrato.
        Pepe Sosa

        Pepe Sosa

        student•
        hace 4 años

        Declaración completa de la función:

        // palabra clave o declaración - function // nombre - Suma // parámetros - ( uint numero1, uint numero2 ) // Modificador de acceso - public // Tipo de función - pure // Tipo de retorno - returns (uint) function Suma( uint numero1, uint numero2 ) public pure returns (uint) { return numero1 + numero2; }
        Iván Jijón

        Iván Jijón

        student•
        hace 4 años

        Un método no es lo mismo que un procedimiento...

        • Método es un término de la programación orientada a objetos, hace referencia a una función que pertenece a una clase.

        • Una función devuelve un valor.

        • Un procedimiento ejecuta una serie de acciones (típicamente hace mutar las variablesque definen el estado) y no devuelve nada.

          Adolfo Sebastián Jara Gavilanes

          Adolfo Sebastián Jara Gavilanes

          student•
          hace 4 años

          Muchas gracias por la aclaración

        Agostina Yakoby Moris

        Agostina Yakoby Moris

        student•
        hace 4 años

        Propongo una variante utilizando un evento para emitir el resultado de la suma y utilizar la función ObtenerResultado.

        // SPDX-License-Identifier: GPL-3.0 pragma solidity >= 0.7.0 < 0.9.0; contract Functions { uint private result; function Add(uint number1, uint number2) public pure returns(uint) { return InternAdd(number1, number2); } function InternAdd(uint number1, uint number2) private pure returns(uint) { return number1 + number2; } function GetResult() public view returns(uint) { return result; } event ShowResult(uint result); constructor(uint number1, uint number2) { result = Add(number1, number2); emit ShowResult(GetResult()); } }

        Entiendo que el código se puede reducir aun más dejando únicamente la función suma y emitiendo la llamada de esta función. Las alternativas son muchas

        Iván Jijón

        Iván Jijón

        student•
        hace 4 años

        En Solidity también existe la convención de primero declarar las variables y después las funciones? El orden en el que se declaran las funciones debe seguir algún orden? (según los modificadores por ejemplo?)

          Sebastian Perez

          Sebastian Perez

          teacher•
          hace 4 años

          Hola Ivan, es correcto existe esa convención. El orden debería ser el siguiente:

          constructor receive fallback external public internal private

          Esto claramente es opcional, puedes seguir tu propio orden. Puedes consultar más estilos aquí: https://docs.soliditylang.org/en/latest/style-guide.html

        Erick Vidal Serrano Salazar

        Erick Vidal Serrano Salazar

        student•
        hace 4 años

        siento que el profe habla y habla y no entiendo nada.

          Rafael Carpio

          Rafael Carpio

          student•
          hace 4 años

          creo que es mejor ir a las bases de programacion, como javascript o varios cursos gratis que hay en platzi

        Luis Alejandro Vera Hernandez

        Luis Alejandro Vera Hernandez

        student•
        hace 4 años

        ¿Qué son las funciones en Solidity?

        Las funciones son secciones de un programa que se encargar de ejecutar instrucciones de forma independiente. Estas pueden recibir parametros para usarlos dentro del código y pueden retornar una o más varibales. (Conocido como input y output)

        Tienen visibilidad al igual que las variables de estado, pueden ser.

        • Public: Totalmente accesible, sea cual sea el origen.
        • Private: Accesible únicamente a través de una función incluida en el mismo contrato.
        • Internal: Accesible únicamente a través de otra función incluida en el mismo contrato, o desde una función de un contrato que deriva del mismo. NO es accesible desde un mensaje de un contrato externo o una transacción externa.
        • External: Accesible desde una cuenta de propiedad externa y a través de un mensaje (llamada desde otro contrato). No es accesible desde una función del mismo contrato o uno derivado del mismo.
        Pepe Sosa

        Pepe Sosa

        student•
        hace 4 años

        En la clase no utilizamos la función "ObtenerResultado" que es de tipo view, para esto podríamos modificar la función "Suma" y asignar el resultado a la variable privada "resultado", luego devolver esa variable. Será necesaroi que la función Suma no sea pure.

        contract Funciones{ uint private resultado; function Suma( uint _numero1, uint _numero2 ) public returns (uint) { resultado = sumaInterna(_numero1, _numero2); return resultado; } function sumaInterna( uint _num1, uint _num2) private pure returns (uint){ return _num1 + _num2; } function ObtenerResultado() public view returns (uint){ return resultado; } }

        Ahora al ejecutar la función "ObtenerResultado" en el deploy, podemos ver lo que tiene la variable privada (accedemos a ella desde una función pública).

        Patricia Calisto Gutierrez

        Patricia Calisto Gutierrez

        student•
        hace 4 años

        Que diferencia hay entre funciones prívate y internal?

          Luis Alejandro Vera Hernandez

          Luis Alejandro Vera Hernandez

          student•
          hace 4 años
          • Private: Accesible únicamente a través de una función incluida en el mismo contrato.
          • Internal: Accesible únicamente a través de otra función incluida en el mismo contrato, o desde una función de un contrato que deriva del mismo. NO es accesible desde un mensaje de un contrato externo o una transacción externa.

          Documentacion

          Sebastian Perez

          Sebastian Perez

          teacher•
          hace 4 años

          Es como dice Luis ! Internal funciona como el privado, pero tiene sentido cuando se aplica la herencia.

        jonathan vasquez

        jonathan vasquez

        student•
        hace 4 años

        ¿Que sentido tuve el poner la variable resultado, si realmente no se utilizo? Entiendo que fue con el objetivo de explicar otro concepto, no se si estoy en lo cierto

          Sebastian Perez

          Sebastian Perez

          teacher•
          hace 4 años

          Hola Jonathan, en el ejemplo se utilizó para mostrar que una variable privada no tiene una función de acceso externa y para poder accederla debemos definir una función (en este caso ObtenerResultado)

        Jonas Ivan Tsuchida

        Jonas Ivan Tsuchida

        student•
        hace 4 años

        Profe, no se si toqué algo pero de repente me empezó a marcar todo el tiempo esta advertencia en rojo. (Antes lo venía usando sin problemas sin que me marque nada, esto me empezó a pasar después de tocar alguna opción en el menú de "Home" de Remix creo).

        error.PNG

          Jesus M Cocaño Diaz

          Jesus M Cocaño Diaz

          student•
          hace 4 años

          muevete a la parte del compilador y selecciona uno que este entre la 0.7.0 y la 0.9.0, despues guarda y se resuelve

          Sebastian Perez

          Sebastian Perez

          teacher•
          hace 4 años

          Excelente respuesta, AkiraT comentanos si lo has podido resolver con este paso

        Abidan Triguero Calle

        Abidan Triguero Calle

        student•
        hace 4 años

        RESUMEN CLASE 9: FUNCIONES

        I.- FUNCIONES

        • Son piezas de código que se identifican con un nombre y que pueden ser invocadas desde otras partes del contrato o fuera del mismo para realizar una acción.

        • El ingreso de parámetros es opcional al igual que el retorno de un valor. Es decir, puede que una función no retorne valores y solo ejecute una acción.

        II.- TIPOS DE FUNCIONES

        • public: son accesibles desde todo ámbito posible.

        • private: solo son accesibles desde el mismo contrato.

        • internal: solo son accesibles desde el mismo contrato y sus contratos derivados.

        • external: solo accesibles desde fuera del contrato.

        • view: indica que la función es de sólo lectura y no modifica el estado del contrato.

        • pure: indica que no se accede a ningún valor del estado del contrato (o sea sus variables).

        REMIX:

        CLASE 9 Imagen1Funciones.png

        Funciones.sol

        // SPDX-License-Identifier: GLP-3.0 pragma solidity >=0.7.0 <0.9.0; contract Funciones { function Suma(uint numero1, uint numero2) public pure returns (uint) { return sumaInterna(numero1, numero2); } function sumaInterna(uint numero1, uint numero2) private pure returns(uint) { return numero1 + numero2; } uint private resultado; function ObtenerResultado() public view returns (uint) { return resultado; } }
        MIGUEL ANGEL DELGADO ARPITA

        MIGUEL ANGEL DELGADO ARPITA

        student•
        hace 4 años

        Asigne un numero a variable privada " resultado" para verlo despues del deploy, si no lo asignan veran el cero que se le da automaticamente.

        funcion.png

        Guillermo Garcia

        Guillermo Garcia

        student•
        hace 4 años

        Structs y arrays Los structs son tipos de datos complejos que nos permiten almacenar información de distintos tipos en un solo esquema

        Po ejemplo podríamos crear la estructura alumno y que este tenga el nombre y apellido con numero de documentación, sus nota o asistencias y todos estos pertenecen a diferentes tipos de datos almacenados en la misma estructura

        En el caso de necesitar una cadena de datos del mismo tipo de dato vamos a tener los arrays que se almacena de forma consecutiva y se puede acceder a sus elementos según su posición

        Se dividen en:

        Arrays estáticos: son aquellas que sabemos su tamaño

        Arrays dinámicos: son aquellas que no sabemos su tamaño final

        Miguel Angel Escurra

        Miguel Angel Escurra

        student•
        hace 4 años

        Pure

        Como ninguna función está modificando el estado de las variables del contrato, simplemente estamos haciendo una suma de los parámetros. Y como ninguna función está cambiando el estado del contrato o de variables (tampoco las está consultando). Se puede decir que está en estado puro o "pure".

          Guillermo Leonardo Rossi

          Guillermo Leonardo Rossi

          student•
          hace 4 años

          consumen gas las funciones puras? supongo q si

        Jesus M Cocaño Diaz

        Jesus M Cocaño Diaz

        student•
        hace 4 años

        Me queda claro la parte de las funciones publicas y privadas, pero las internas y las externas me generan dudas ¿Alguna buena persona que me pueda dar algunos ejemplos? muchas gracias

          Nilson Diaz

          Nilson Diaz

          student•
          hace 4 años

          Hey ! tienen algunas ligeras diferencias

          • Publicas : Pueden accederse desde otros contratos ya sea por herencia, y tambien estan disponibles para llarmase fuera del contrato
          • Privadas : Solo pueden ser llamadas dentro del contrato donde se declararon , no podran ser llamdas ni desde fuera ni por herencia
          • External: Solo pueden ser llamdas unicamente desde fuera del contrato por una aplicacion o por otros contratos
          • Internal : Como privada pero esta si puede llamarse atraves de herencia , de igual forma no estan disponibles afuera del contrato.

          Puedes verlo en la Documentacion de solidity, Documentacion internal y external

          y tambien si quieres puedes probarlo en remixIDE y jugar un poco con la visibilidad de las funciones

          Espero te ayude!

          Sebastian Perez

          Sebastian Perez

          teacher•
          hace 4 años

          Excelente aporte de Nilson ! Recuerda que un buen uso de las externas son por ejemplo las funciones de receive y fallback.