Комп’ютери, як і люди, спілкуються різними мовами. Solidity та Vyper — дві відомі мови в сфері блокчейну Ethereum. Ми представили Vyper, мову програмування смарт-контрактів Ethereum, і порівняли її з Solidity в уроці 1. У цьому розділі ми заглибимося в синтаксис Vyper, який разюче схожий на синтаксис Python. Однією з цілей Vyper є полегшення кодування смарт-контрактів, зберігаючи належний рівень безпеки. Його синтаксис має бути максимально простим і зрозумілим. Якщо ви програміст на Python, ви почуватиметеся як вдома. Навіть якщо ви ні, Python-подібний синтаксис Vyper легко вивчити. Давайте розглянемо основні синтаксичні компоненти Vyper.
Python 
 # Це коментар у Vyper 
 @external 
 def greet(name: string[10]) -> string[30]: 
 return concat("Привіт, ", ім'я, "!")
Типи даних є будівельними блоками будь-якої мови програмування. Вони визначають, які дані можна зберігати та маніпулювати в програмі. Давайте розглянемо деякі основні типи даних, які пропонує Vyper:
flag: bool = Trueint128. Приклад: count: int128 = 10price: decimal = 123.45name: string[20] = 'Alice'numbers: int128[5] = [1, 2, 3, 4, 5]Підсумовуючи, деякі значення, доступні у Vyper:
boolint128uint256десяткові знакиадресубайт32БайтиРядокPython 
 # @version ^0.3.7 
 b: public(bool) 
 i: public(int128) # -2 ** 127 до (2 ** 127 - 1) 
 u: public(uint256) # 0 до 2 * * 256 - 1 
 dec: public(decimal) # -2 ** 127 to (2 ** 127 - 1), 10 знаків після коми 
 addr: public(address) 
 b32: public(bytes32) 
 bs: public(Bytes) [100]) 
 s: public(String[100]) 
 @external 
 def __init__(): 
 self.b = False 
 self.i = -1 
 самост.у = 123 
 self.dec = 3.14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206 e26ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Привіт Вайпер"
Функції у Vyper, як і в багатьох інших мовах, є блоками багаторазового коду, які виконують конкретне завдання. Вони забезпечують кращу модульність вашої програми та дають можливість багаторазового використання коду.
У Vyper ви можете визначити функцію за допомогою ключового слова def , як і в Python. Функції також мають список параметрів і тип повернення. Ось проста функція Vyper:
Python 
 @external 
 def add(a: int128, b: int128) -> int128: 
 return a + b
Декоратор @externalробить цю функцію викликаною поза контрактом (через транзакцію чи інший контракт). Без цього декоратора функцію можна було б викликати лише в межах контракту, де вона визначена.
Функції @internal можна викликати лише всередині контракту.
Функції @external можна викликати лише за межами контракту.
приклад:
Python 
 # @version ^0.3.7 
 # Внутрішні функції можна викликати лише всередині цього контракту 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 
 @external 
 @view 
 def extFunc() -> bool: 
 return True 
 # Зовнішні функції можна викликати лише за межами цього контракту 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # не можна викликати іншу зовнішню функцію 
 # self.extFunc()
    # може викликати внутрішні функції 
 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: 
 повертає self._sqr(x) + self._sqr(y)
Керуючі структури використовуються для виконання різних дій на основі різних рішень. Vyper пропонує кілька керуючих структур, включаючи цикли if, for і while.
Інструкція if є найпростішою керуючою структурою. Він виконує блок коду, лише якщо задана умова виконується.
Python 
 @external 
 def is_greater_than_ten(a: int128) -> bool: 
 if a > 10: 
 повертає True 
 else: 
 повертає False
Цикл for у Vyper має той самий синтаксис, що й у Python. Ви можете виконати набір інструкцій один раз для кожного елемента в списку, кортежі, наборі тощо.
Числа Python 
 : int128[5] = [1, 2, 3, 4, 5] 
 @external 
 def sum_numbers() -> int128: 
 sum: int128 = 0 
 for i in range(5): 
 sum + = self.numbers[i]
    сума повернення
Цикл while у Vyper неодноразово виконує цільовий оператор, доки задана умова виконується.
Python 
 @external 
 def count_to_ten() -> int128: 
 count: int128 = 0 
 while count < 10: 
 count += 1 
 return count
У програмуванні обробка помилок має вирішальне значення для роботи з помилками під час виконання та надання значущих повідомлень про помилки користувачеві. Vyper використовує оператор assert для обробки помилок.
Python 
 @external 
 def divide(a: decimal, b: decimal) -> decimal: 
 assert b != 0, "Неможливо поділити на нуль" 
 return a / b
У наведеному вище коді, якщо b дорівнює нулю, буде видано повідомлення про помилку «Неможливо поділити на нуль», і транзакцію буде скасовано. В іншому випадку він перейде до операції поділу.
Vyper також надає оператор revert , який можна використовувати для зупинки виконання поточного виклику та повернення змін стану, а також надаючи повідомлення про помилку.
Це короткий виклад синтаксису та основних принципів Vyper. Ключем до оволодіння Vyper, як і будь-якою мовою програмування, є практика. Я пропоную використовувати ці техніки для написання простих програм. У наступній сесії ми розповімо, як використовувати Vyper для створення та підтримки смарт-контрактів. Слідкуйте!
Вітаємо з успішним завершенням уроку 2! Ви досягли величезного прогресу в розумінні синтаксису та фундаментальних конструкцій Vyper. Ми ознайомилися з синтаксисом Vyper, основними типами даних і функціями, керуючими структурами та обробкою помилок у Vyper. Нагадаємо, що кожен із цих компонентів є основою будь-якої програми Vyper. Дуже важливо мати тверде розуміння цих основних компонентів, і найкращий спосіб зробити це – практикуватися та досліджувати. Створюйте прості програми, які включають те, про що ви дізналися сьогодні. Немає альтернативи практичному досвіду, коли мова йде про кодування.
Підготуйтеся заглибитися у світ смарт-контрактів Ethereum із Vyper у майбутньому. В Уроці 3 ми розглянемо більш складні принципи Vyper. Ми розглянемо більш практичний підхід, зосередившись на розробці, реалізації та взаємодії з розумними контрактами в мережі Ethereum. Зрозумійте, що світ технології блокчейн широкий і постійно змінюється. Як інженер блокчейну, ваша подорож відкриттів і навчання ніколи не закінчується. Ви на шляху до майстерності, і кожен крок вперед, яким би крихітним він не був, є кроком попереду. Продовжуйте свої чудові зусилля, і ми побачимося на уроці 3!