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
  • 2
    Programación en Solidity para Contratos Inteligentes en Blockchain

    Programación en Solidity para Contratos Inteligentes en Blockchain

    03:23
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
  • 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
  • 5
    Estructuras y Arrays en Contratos Inteligentes

    Estructuras y Arrays en Contratos Inteligentes

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

    Estructuras de datos en Solidity: Mappings y enums

    11:53
  • 7
    Estructuras de control en Solidity

    Estructuras de control en Solidity

    10:48
  • 8
    Manejo de Eventos con Solidity

    Manejo de Eventos con Solidity

    05:29
Programación de Funciones en Solidity
  • 9
    Cómo implementar funciones en Solidity

    Cómo implementar funciones en Solidity

    09:13
  • 10
    Uso de Modificadores en Solidity

    Uso de Modificadores en Solidity

    08:41
  • 11
    Manejo de errores

    Manejo de errores

    07:35
Gestionando costos de gas y comisiones
  • 12
    Tipos de almacenamiento

    Tipos de almacenamiento

    05:17
  • 13
    Manejo del gas y comisiones

    Manejo del gas y comisiones

    08:37
  • 14
    Transferencias de ether desde un contrato

    Transferencias de ether desde un contrato

    09:47
  • 15
    Recibir ether desde un contrato

    Recibir ether desde un contrato

    11:50
Conceptos avanzados de Solidity
  • 16
    Manejo de dependencias y librerías

    Manejo de dependencias y librerías

    08:12
  • 17
    Uso de la herencia en Solidity

    Uso de la herencia en Solidity

    14:41
  • 18
    Polimorfismo en contratos inteligentes

    Polimorfismo en contratos inteligentes

    09:05
  • 19
    Tokens

    Tokens

    13:34
  • 20
    Application Binary Interface (ABI)

    Application Binary Interface (ABI)

    06:50
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
    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 3 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 3 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 3 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 3 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.

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