Leçon 2

Comprender la sintaxis y los conceptos básicos de Vyper

Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum.

Introducción a la sintaxis de Vyper

Las computadoras, al igual que las personas, se comunican en una variedad de idiomas. Solidity y Vyper son dos lenguajes notables en el ámbito de la cadena de bloques Ethereum. Presentamos Vyper, un lenguaje de programación de contratos inteligentes de Ethereum, y lo comparamos con Solidity en la lección 1. En cambio, en esta sección profundizaremos en la sintaxis de Vyper, que es sorprendentemente similar a la de Python. Uno de los objetivos de Vyper es facilitar la codificación de contratos inteligentes manteniendo una buena seguridad. Su sintaxis pretende ser lo más simple y directa posible. Te sentirás como en casa si eres un codificador de Python. Incluso si no lo eres, la sintaxis similar a Python de Vyper es fácil de aprender. Veamos los principales componentes sintácticos de Vyper.

Python 
 # Este es un comentario en Vyper 
 @external 
 def saludar(nombre: cadena[10]) -> cadena[30]: 
 return concat("Hola", nombre, "!")

Tipos de datos básicos en Vyper

Los tipos de datos son los componentes básicos de cualquier lenguaje de programación. Definen qué tipo de datos se pueden almacenar y manipular dentro de un programa. Repasemos algunos tipos de datos básicos que ofrece Vyper:

  • Booleano: este es un tipo de datos binarios que puede tener uno de dos valores posibles, verdadero o falso. Ejemplo: flag: bool = True
  • Enteros: Vyper admite números enteros, que son números enteros que pueden ser positivos, negativos o cero. Vienen en varios tamaños, desde 8 hasta 256 bits, siendo el más común int128. Ejemplo: count: int128 = 10
  • Decimal: Se utiliza para representar números de coma flotante, es decir, números que tienen un punto decimal. Ejemplo: price: decimal = 123.45
  • Bytes y cadenas: los bytes son secuencias de datos de bytes, mientras que las cadenas son secuencias de caracteres Unicode. Ejemplo: name: string[20] = 'Alice'
  • Listas y matrices: las listas son una colección de elementos del mismo tipo de datos. Las matrices, por otro lado, son un tipo especial de lista donde la longitud es fija. Ejemplo: numbers: int128[5] = [1, 2, 3, 4, 5]
    Cada uno de estos tipos de datos tiene su propio lugar al redactar contratos inteligentes. Deberá elegir el tipo de datos correcto para cada dato que desee almacenar, según el tipo de operaciones que desee realizar con esos datos.

En resumen, algunos valores disponibles en Vyper:

  • booleano
  • int128
  • uint256
  • decimales
  • DIRECCIÓN
  • bytes32
  • bytes
  • Cadena
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 a (2 ** 127 - 1) 
 u: public(uint256) # 0 a 2 * * 256 - 1 
 dec: público(decimal) # -2 ** 127 a (2 ** 127 - 1), 10 decimales 
 dirección: público(dirección) 
 b32: público(bytes32) 
 bs: público(Bytes [100]) 
 s: public(String[100]) 


 @external 
 def __init__(): 
 self.b = Falso 
 yo.i = -1 
 yo.u = 123 
 self.dec = 3.14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e 26ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Hola Vyper"

Funciones en Vyper

Las funciones en Vyper, al igual que en muchos otros lenguajes, son bloques de código reutilizable que realizan una tarea específica. Proporcionan una mejor modularidad para su aplicación y permiten la reutilización del código.

En Vyper, puedes definir una función usando la palabra clave def , como en Python. Las funciones también tienen una lista de parámetros y un tipo de retorno. Aquí hay una función Vyper simple:

Python 
 @external 
 def agregar (a: int128, b: int128) -> int128: 
 devolver a + b

El decorador @externalhace que esta función sea invocable desde fuera del contrato (mediante una transacción u otro contrato). Sin este decorador, la función solo sería invocable dentro del contrato donde está definida.

Funciones internas y externas

Las funciones @internal solo se pueden llamar dentro del contrato.

Las funciones @external solo se pueden llamar desde fuera del contrato.

Ejemplo:

Python 
 # @version ^0.3.7 

 # Las funciones internas solo se pueden llamar dentro de este contrato 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Las funciones externas solo se pueden llamar desde fuera de este contrato 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # No se puede llamar a otra función externa 
 # self.extFunc()

    # puede llamar a funciones internas 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 devuelve self._sqr(x) + yo._sqr(y)

Estructuras de control en Vyper

Las estructuras de control se utilizan para realizar diferentes acciones basadas en diferentes decisiones. Vyper ofrece varias estructuras de control, incluidas if, for loop y while loop.

La declaración if es la estructura de control más básica. Ejecuta un bloque de código sólo si una condición especificada es verdadera.

Python 
 @external 
 def is_greater_than_ten(a: int128) -> bool: 
 si a > 10: 
 devuelve Verdadero 
 de lo contrario: 
 devuelve Falso

El bucle for en Vyper tiene la misma sintaxis que en Python. Puede ejecutar un conjunto de declaraciones, una vez para cada elemento de una lista, tupla, conjunto, etc.

Números de Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 suma: int128 = 0 
 para i en el rango(5): 
 suma + = self.números[i]
    suma de devolución

El bucle while en Vyper ejecuta repetidamente una declaración de destino siempre que una condición determinada sea verdadera.

Python 
 @external 
 def count_to_ten() -> int128: 
 conteo: int128 = 0 
 mientras conteo < 10: 
 conteo += 1 
 devuelve conteo

Manejo de errores en Vyper

En programación, el manejo de errores es crucial para abordar los errores de tiempo de ejecución y proporcionar mensajes de error significativos al usuario. Vyper usa la declaración assert para manejar errores.

Python 
 @external 
 def dividir (a: decimal, b: decimal) -> decimal: 
 afirmar b! = 0, "No se puede dividir por cero" 
 devolver a/b

En el código anterior, si b es cero, se generará un mensaje de error "No se puede dividir por cero" y se revertirá la transacción. En caso contrario se procederá a la operación de división.

Vyper también proporciona la instrucción revert que se puede utilizar para detener la ejecución de la llamada actual y revertir los cambios de estado, al mismo tiempo que proporciona un mensaje de error.

Este es un resumen rápido de la sintaxis y los principios fundamentales de Vyper. La clave para dominar Vyper, como ocurre con cualquier lenguaje de programación, es la práctica. Recomiendo el uso de estas técnicas para escribir aplicaciones simples. En la siguiente sesión, veremos cómo usar Vyper para construir y mantener contratos inteligentes. ¡Estar atento!

¡Felicitaciones por completar con éxito la Lección 2! Ha logrado un enorme progreso en la comprensión de la sintaxis y las construcciones fundamentales de Vyper. Hemos repasado una introducción a la sintaxis de Vyper, funciones y tipos de datos básicos, estructuras de control y manejo de errores en Vyper. Recuerde que cada uno de estos componentes es la base de cualquier programa Vyper. Es fundamental tener una comprensión firme de estos componentes centrales y la mejor manera de hacerlo es practicar y explorar. Cree programas simples que incorporen lo que ha aprendido hoy. No existe otra alternativa para la experiencia práctica cuando se trata de codificación.

Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum. Comprenda que el mundo de la tecnología blockchain es amplio y cambia constantemente. Como ingeniero de blockchain, su viaje de descubrimiento y aprendizaje nunca termina realmente. Estás en el camino hacia la maestría y cada paso adelante, por pequeño que sea, es un paso adelante. ¡Continúa con tu excelente esfuerzo y nos vemos en la Lección 3!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 2

Comprender la sintaxis y los conceptos básicos de Vyper

Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum.

Introducción a la sintaxis de Vyper

Las computadoras, al igual que las personas, se comunican en una variedad de idiomas. Solidity y Vyper son dos lenguajes notables en el ámbito de la cadena de bloques Ethereum. Presentamos Vyper, un lenguaje de programación de contratos inteligentes de Ethereum, y lo comparamos con Solidity en la lección 1. En cambio, en esta sección profundizaremos en la sintaxis de Vyper, que es sorprendentemente similar a la de Python. Uno de los objetivos de Vyper es facilitar la codificación de contratos inteligentes manteniendo una buena seguridad. Su sintaxis pretende ser lo más simple y directa posible. Te sentirás como en casa si eres un codificador de Python. Incluso si no lo eres, la sintaxis similar a Python de Vyper es fácil de aprender. Veamos los principales componentes sintácticos de Vyper.

Python 
 # Este es un comentario en Vyper 
 @external 
 def saludar(nombre: cadena[10]) -> cadena[30]: 
 return concat("Hola", nombre, "!")

Tipos de datos básicos en Vyper

Los tipos de datos son los componentes básicos de cualquier lenguaje de programación. Definen qué tipo de datos se pueden almacenar y manipular dentro de un programa. Repasemos algunos tipos de datos básicos que ofrece Vyper:

  • Booleano: este es un tipo de datos binarios que puede tener uno de dos valores posibles, verdadero o falso. Ejemplo: flag: bool = True
  • Enteros: Vyper admite números enteros, que son números enteros que pueden ser positivos, negativos o cero. Vienen en varios tamaños, desde 8 hasta 256 bits, siendo el más común int128. Ejemplo: count: int128 = 10
  • Decimal: Se utiliza para representar números de coma flotante, es decir, números que tienen un punto decimal. Ejemplo: price: decimal = 123.45
  • Bytes y cadenas: los bytes son secuencias de datos de bytes, mientras que las cadenas son secuencias de caracteres Unicode. Ejemplo: name: string[20] = 'Alice'
  • Listas y matrices: las listas son una colección de elementos del mismo tipo de datos. Las matrices, por otro lado, son un tipo especial de lista donde la longitud es fija. Ejemplo: numbers: int128[5] = [1, 2, 3, 4, 5]
    Cada uno de estos tipos de datos tiene su propio lugar al redactar contratos inteligentes. Deberá elegir el tipo de datos correcto para cada dato que desee almacenar, según el tipo de operaciones que desee realizar con esos datos.

En resumen, algunos valores disponibles en Vyper:

  • booleano
  • int128
  • uint256
  • decimales
  • DIRECCIÓN
  • bytes32
  • bytes
  • Cadena
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 a (2 ** 127 - 1) 
 u: public(uint256) # 0 a 2 * * 256 - 1 
 dec: público(decimal) # -2 ** 127 a (2 ** 127 - 1), 10 decimales 
 dirección: público(dirección) 
 b32: público(bytes32) 
 bs: público(Bytes [100]) 
 s: public(String[100]) 


 @external 
 def __init__(): 
 self.b = Falso 
 yo.i = -1 
 yo.u = 123 
 self.dec = 3.14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e 26ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Hola Vyper"

Funciones en Vyper

Las funciones en Vyper, al igual que en muchos otros lenguajes, son bloques de código reutilizable que realizan una tarea específica. Proporcionan una mejor modularidad para su aplicación y permiten la reutilización del código.

En Vyper, puedes definir una función usando la palabra clave def , como en Python. Las funciones también tienen una lista de parámetros y un tipo de retorno. Aquí hay una función Vyper simple:

Python 
 @external 
 def agregar (a: int128, b: int128) -> int128: 
 devolver a + b

El decorador @externalhace que esta función sea invocable desde fuera del contrato (mediante una transacción u otro contrato). Sin este decorador, la función solo sería invocable dentro del contrato donde está definida.

Funciones internas y externas

Las funciones @internal solo se pueden llamar dentro del contrato.

Las funciones @external solo se pueden llamar desde fuera del contrato.

Ejemplo:

Python 
 # @version ^0.3.7 

 # Las funciones internas solo se pueden llamar dentro de este contrato 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Las funciones externas solo se pueden llamar desde fuera de este contrato 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # No se puede llamar a otra función externa 
 # self.extFunc()

    # puede llamar a funciones internas 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 devuelve self._sqr(x) + yo._sqr(y)

Estructuras de control en Vyper

Las estructuras de control se utilizan para realizar diferentes acciones basadas en diferentes decisiones. Vyper ofrece varias estructuras de control, incluidas if, for loop y while loop.

La declaración if es la estructura de control más básica. Ejecuta un bloque de código sólo si una condición especificada es verdadera.

Python 
 @external 
 def is_greater_than_ten(a: int128) -> bool: 
 si a > 10: 
 devuelve Verdadero 
 de lo contrario: 
 devuelve Falso

El bucle for en Vyper tiene la misma sintaxis que en Python. Puede ejecutar un conjunto de declaraciones, una vez para cada elemento de una lista, tupla, conjunto, etc.

Números de Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 suma: int128 = 0 
 para i en el rango(5): 
 suma + = self.números[i]
    suma de devolución

El bucle while en Vyper ejecuta repetidamente una declaración de destino siempre que una condición determinada sea verdadera.

Python 
 @external 
 def count_to_ten() -> int128: 
 conteo: int128 = 0 
 mientras conteo < 10: 
 conteo += 1 
 devuelve conteo

Manejo de errores en Vyper

En programación, el manejo de errores es crucial para abordar los errores de tiempo de ejecución y proporcionar mensajes de error significativos al usuario. Vyper usa la declaración assert para manejar errores.

Python 
 @external 
 def dividir (a: decimal, b: decimal) -> decimal: 
 afirmar b! = 0, "No se puede dividir por cero" 
 devolver a/b

En el código anterior, si b es cero, se generará un mensaje de error "No se puede dividir por cero" y se revertirá la transacción. En caso contrario se procederá a la operación de división.

Vyper también proporciona la instrucción revert que se puede utilizar para detener la ejecución de la llamada actual y revertir los cambios de estado, al mismo tiempo que proporciona un mensaje de error.

Este es un resumen rápido de la sintaxis y los principios fundamentales de Vyper. La clave para dominar Vyper, como ocurre con cualquier lenguaje de programación, es la práctica. Recomiendo el uso de estas técnicas para escribir aplicaciones simples. En la siguiente sesión, veremos cómo usar Vyper para construir y mantener contratos inteligentes. ¡Estar atento!

¡Felicitaciones por completar con éxito la Lección 2! Ha logrado un enorme progreso en la comprensión de la sintaxis y las construcciones fundamentales de Vyper. Hemos repasado una introducción a la sintaxis de Vyper, funciones y tipos de datos básicos, estructuras de control y manejo de errores en Vyper. Recuerde que cada uno de estos componentes es la base de cualquier programa Vyper. Es fundamental tener una comprensión firme de estos componentes centrales y la mejor manera de hacerlo es practicar y explorar. Cree programas simples que incorporen lo que ha aprendido hoy. No existe otra alternativa para la experiencia práctica cuando se trata de codificación.

Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum. Comprenda que el mundo de la tecnología blockchain es amplio y cambia constantemente. Como ingeniero de blockchain, su viaje de descubrimiento y aprendizaje nunca termina realmente. Estás en el camino hacia la maestría y cada paso adelante, por pequeño que sea, es un paso adelante. ¡Continúa con tu excelente esfuerzo y nos vemos en la Lección 3!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.