Урок 2

Vyperの構文と基本概念を理解する

将来的には、Vyperとのイーサリアムスマートコントラクトの世界に深く入り込む準備をしてください。 レッスン3では、より洗練されたVyperの原則を見ていきます。 より実践的なアプローチを取り、イーサリアムネットワーク上のスマートコントラクトの設計、実装、および相互作用に集中します。

Vyperの構文の紹介

コンピュータは、人と同様に、さまざまな言語で通信します。 SolidityとVyperは、イーサリアムブロックチェーンの領域における2つの注目すべき言語です。 イーサリアムのスマートコントラクトプログラミング言語であるVyperを紹介し、レッスン1でSolidityと比較しました。 代わりにこのセクションでは、Python の構文と非常によく似た Vyper の構文について詳しく説明します。 Vyperの目標の1つは、優れたセキュリティを維持しながら、スマートコントラクトのコーディングを容易にすることです。 その構文は、可能な限り単純でわかりやすいものにすることを目的としています。 あなたがPythonコーダーなら、あなたは完全に家にいるように感じるでしょう。 そうでない場合でも、VyperのPythonのような構文は簡単に習得できます。 Vyperの主な構文コンポーネントを見てみましょう。

ニシキヘビ
# これはヴァイパーのコメントです
@external
def greet(name: string[10]) -> 文字列[30]:
    戻り値 concat("Hello, ", name, "!")

バイパーの基本的なデータ型

データ型 は、あらゆるプログラミング言語の構成要素です。 これらは、プログラム内で保存および操作できるデータの種類を定義します。 Vyperが提供するいくつかの基本的なデータ型を見ていきましょう。

  • ブール値: これは、true または false の 2 つの可能な値のいずれかを持つことができるバイナリ データ型です。 例: flag: bool = True
  • 整数: Vyper は、正、負、またはゼロのいずれかの整数である整数をサポートしています。 それらは8ビットから256ビットまでのさまざまなサイズで提供され、最も一般的なものは int128。 例: count: int128 = 10
  • 10進数:これは、浮動小数点数、つまり小数点を持つ数値を表すために使用されます。 例: price: decimal = 123.45
  • バイトと文字列: バイトはバイト データのシーケンスであり、文字列は Unicode 文字のシーケンスです。 例: name: string[20] = 'Alice'
  • リストと配列: リストは、同じデータ型の項目のコレクションです。 一方、配列は、長さが固定されている特別なタイプのリストです。 例: numbers: int128[5] = [1, 2, 3, 4, 5]
    これらの各データ型には、スマートコントラクトを作成する上で独自の場所があります。 データに対して実行する操作の種類に基づいて、格納するデータごとに適切なデータ型を選択する必要があります。

要約すると、Vyperで利用可能ないくつかの値:

  • ブール値
  • int128
  • uint256
  • 小数
  • 住所
  • バイト32
  • バイト
ニシキヘビ
# @version ^0.3.7

b: パブリック(ブール値)
i: public(int128) # -2 ** 127 to (2 ** 127 - 1)
u: public(uint256) # 0 から 2 ** 256 - 1
12月: パブリック(10 進数) # -2 ** 127 から (2 ** 127 - 1)、小数点以下 10 桁
アドレス: パブリック(アドレス)
B32: パブリック(バイト32)
bs: パブリック(バイト[100])
s: パブリック(文字列[100])

@external
def __init__():
    セルフ = 偽
    セルフアイ = -1
    セルフ = 123
    自己 12 月 = 3.14
    自己.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
    self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e26ae84b525cdacb
    self.bs = b"\x01"
    セルフ = "こんにちはバイパー"

ヴァイパーの関数

Vyperの関数は、他の多くの言語と同様に、特定のタスクを実行する再利用可能なコードのブロックです。 アプリケーションのモジュール性が向上し、コードの再利用性が向上します。

Vyperでは、Pythonの場合と同様に、キーワードを使用して def 関数を定義できます。 関数には、パラメーターのリストと戻り値の型もあります。 単純な Vyper 関数を次に示します。

ニシキヘビ
@external
def add(a: int128, b: int128) -> int128:
    a + b を返す

デコレータは @external、この関数をコントラクトの外部から (トランザクションまたは別のコントラクトによって) 呼び出し可能にします。 このデコレータがないと、関数は定義されているコントラクト内でのみ呼び出すことができます。

内部関数と外部関数

@internal 関数はコントラクト内でのみ呼び出すことができます。

@external 関数は、コントラクトの外部からのみ呼び出すことができます。

例:

ニシキヘビ
# @version ^0.3.7

# 内部関数は、このコントラクト内でのみ呼び出すことができます
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
    x + y を返す

@external
@view
def extFunc() -> bool:
    真を返す

# 外部関数は、このコントラクトの外部からのみ呼び出すことができます
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
    # 他の外部関数を呼び出すことはできません
    # self.extFunc()    # 内部関数を呼び出すことができます
    z: uint256 = self._add(x, y)

戻り値 (x + y) / 2

@internal
@pure
def _sqr(x: uint256) -> uint256:
    x * x を返す

@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
    self._sqr(x) を返す + self._sqr(y)

ヴァイパーの制御構造

制御構造は、さまざまな決定に基づいてさまざまなアクションを実行するために使用されます。 Vyperは、if、forループ、whileループを含むいくつかの制御構造を提供します。

この if ステートメントは、最も基本的な制御構造です。 指定された条件が true の場合にのみ、コード ブロックが実行されます。

ニシキヘビ
@external
def is_greater_than_ten(a: int128) -> bool:
    > 10 の場合:
        真を返す
    然も無くば:
        戻り値 偽

Vyper のループの for 構文は Python と同じです。 リスト、タプル、セットなどの各項目に対して一度、一連のステートメントを実行できます。

ニシキヘビ
数値: int128[5] = [1, 2, 3, 4, 5]

@external
def sum_numbers() -> int128:
    合計: int128 = 0
    範囲(5)のiの場合:
        合計 += 自己数値[i]    戻り値の合計

Vyperのループは while 、特定の条件が真である限り、ターゲットステートメントを繰り返し実行します。

ニシキヘビ
@external
def count_to_ten() -> int128:
    カウント: int128 = 0
    10<数えながら:
        カウント += 1
    戻り回数

Vyper でのエラー処理

プログラミングでは、ランタイムエラーを処理し、ユーザーに意味のあるエラーメッセージを提供するために、エラー処理が重要です。 Vyperはステートメント assert を使用してエラーを処理します。

ニシキヘビ
@external
def 除算(a: 10 進数、b: 10 進数) -> 進数:
    アサート b != 0, "ゼロ除算できません"
    A / Bを返す

上記のコードで、ゼロの場合 b 、「ゼロで除算できません」というエラーメッセージがスローされ、トランザクションが元に戻されます。 それ以外の場合は、分割操作に進みます。

Vyperは、 revert エラーメッセージを提供しながら、現在の呼び出しの実行を停止して状態の変更を元に戻すために使用できるステートメントも提供します。

以上が Vyper の構文と基本原則を簡単にまとめたものです。 他のプログラミング言語と同様に、Vyperを習得するための鍵は練習です。 私は、これらの手法を使用して単純なアプリケーションを作成することを提唱しています。 次のセッションでは、Vyperを使用してスマートコントラクトを構築および維持する方法について説明します。 目が離せない!

レッスン2無事終了おめでとうございます!あなたはVyperの構文と基本的な構造を理解する上で大きな進歩を遂げました。 Vyperの構文、基本的なデータ型、関数、制御構造、およびVyperのエラー処理の概要を説明しました。 これらの各コンポーネントは、Vyperプログラムの基盤であることを思い出してください。 これらのコアコンポーネントをしっかりと理解することが重要であり、そのための最良の方法は練習して探索することです。 今日学んだことを組み込んだ簡単なプログラムを作成します。 コーディングに関しては、実践的な経験に代わるものはありません。

将来的には、Vyperとのイーサリアムスマートコントラクトの世界に深く入り込む準備をしてください。 レッスン3では、より洗練されたVyperの原則を見ていきます。 より実践的なアプローチを取り、イーサリアムネットワーク上のスマートコントラクトの設計、実装、および相互作用に集中します。 ブロックチェーン技術の世界は広く、絶えず変化していることを理解してください。 ブロックチェーンエンジニアとして、発見と学習の旅は本当に終わることはありません。 あなたは習得への道を進んでおり、どんなに小さくても、前進するすべてのステップは一歩先を進んでいます。 あなたの素晴らしい努力を続けてください、そして私はレッスン3であなたに会います!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 2

Vyperの構文と基本概念を理解する

将来的には、Vyperとのイーサリアムスマートコントラクトの世界に深く入り込む準備をしてください。 レッスン3では、より洗練されたVyperの原則を見ていきます。 より実践的なアプローチを取り、イーサリアムネットワーク上のスマートコントラクトの設計、実装、および相互作用に集中します。

Vyperの構文の紹介

コンピュータは、人と同様に、さまざまな言語で通信します。 SolidityとVyperは、イーサリアムブロックチェーンの領域における2つの注目すべき言語です。 イーサリアムのスマートコントラクトプログラミング言語であるVyperを紹介し、レッスン1でSolidityと比較しました。 代わりにこのセクションでは、Python の構文と非常によく似た Vyper の構文について詳しく説明します。 Vyperの目標の1つは、優れたセキュリティを維持しながら、スマートコントラクトのコーディングを容易にすることです。 その構文は、可能な限り単純でわかりやすいものにすることを目的としています。 あなたがPythonコーダーなら、あなたは完全に家にいるように感じるでしょう。 そうでない場合でも、VyperのPythonのような構文は簡単に習得できます。 Vyperの主な構文コンポーネントを見てみましょう。

ニシキヘビ
# これはヴァイパーのコメントです
@external
def greet(name: string[10]) -> 文字列[30]:
    戻り値 concat("Hello, ", name, "!")

バイパーの基本的なデータ型

データ型 は、あらゆるプログラミング言語の構成要素です。 これらは、プログラム内で保存および操作できるデータの種類を定義します。 Vyperが提供するいくつかの基本的なデータ型を見ていきましょう。

  • ブール値: これは、true または false の 2 つの可能な値のいずれかを持つことができるバイナリ データ型です。 例: flag: bool = True
  • 整数: Vyper は、正、負、またはゼロのいずれかの整数である整数をサポートしています。 それらは8ビットから256ビットまでのさまざまなサイズで提供され、最も一般的なものは int128。 例: count: int128 = 10
  • 10進数:これは、浮動小数点数、つまり小数点を持つ数値を表すために使用されます。 例: price: decimal = 123.45
  • バイトと文字列: バイトはバイト データのシーケンスであり、文字列は Unicode 文字のシーケンスです。 例: name: string[20] = 'Alice'
  • リストと配列: リストは、同じデータ型の項目のコレクションです。 一方、配列は、長さが固定されている特別なタイプのリストです。 例: numbers: int128[5] = [1, 2, 3, 4, 5]
    これらの各データ型には、スマートコントラクトを作成する上で独自の場所があります。 データに対して実行する操作の種類に基づいて、格納するデータごとに適切なデータ型を選択する必要があります。

要約すると、Vyperで利用可能ないくつかの値:

  • ブール値
  • int128
  • uint256
  • 小数
  • 住所
  • バイト32
  • バイト
ニシキヘビ
# @version ^0.3.7

b: パブリック(ブール値)
i: public(int128) # -2 ** 127 to (2 ** 127 - 1)
u: public(uint256) # 0 から 2 ** 256 - 1
12月: パブリック(10 進数) # -2 ** 127 から (2 ** 127 - 1)、小数点以下 10 桁
アドレス: パブリック(アドレス)
B32: パブリック(バイト32)
bs: パブリック(バイト[100])
s: パブリック(文字列[100])

@external
def __init__():
    セルフ = 偽
    セルフアイ = -1
    セルフ = 123
    自己 12 月 = 3.14
    自己.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
    self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e26ae84b525cdacb
    self.bs = b"\x01"
    セルフ = "こんにちはバイパー"

ヴァイパーの関数

Vyperの関数は、他の多くの言語と同様に、特定のタスクを実行する再利用可能なコードのブロックです。 アプリケーションのモジュール性が向上し、コードの再利用性が向上します。

Vyperでは、Pythonの場合と同様に、キーワードを使用して def 関数を定義できます。 関数には、パラメーターのリストと戻り値の型もあります。 単純な Vyper 関数を次に示します。

ニシキヘビ
@external
def add(a: int128, b: int128) -> int128:
    a + b を返す

デコレータは @external、この関数をコントラクトの外部から (トランザクションまたは別のコントラクトによって) 呼び出し可能にします。 このデコレータがないと、関数は定義されているコントラクト内でのみ呼び出すことができます。

内部関数と外部関数

@internal 関数はコントラクト内でのみ呼び出すことができます。

@external 関数は、コントラクトの外部からのみ呼び出すことができます。

例:

ニシキヘビ
# @version ^0.3.7

# 内部関数は、このコントラクト内でのみ呼び出すことができます
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
    x + y を返す

@external
@view
def extFunc() -> bool:
    真を返す

# 外部関数は、このコントラクトの外部からのみ呼び出すことができます
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
    # 他の外部関数を呼び出すことはできません
    # self.extFunc()    # 内部関数を呼び出すことができます
    z: uint256 = self._add(x, y)

戻り値 (x + y) / 2

@internal
@pure
def _sqr(x: uint256) -> uint256:
    x * x を返す

@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
    self._sqr(x) を返す + self._sqr(y)

ヴァイパーの制御構造

制御構造は、さまざまな決定に基づいてさまざまなアクションを実行するために使用されます。 Vyperは、if、forループ、whileループを含むいくつかの制御構造を提供します。

この if ステートメントは、最も基本的な制御構造です。 指定された条件が true の場合にのみ、コード ブロックが実行されます。

ニシキヘビ
@external
def is_greater_than_ten(a: int128) -> bool:
    > 10 の場合:
        真を返す
    然も無くば:
        戻り値 偽

Vyper のループの for 構文は Python と同じです。 リスト、タプル、セットなどの各項目に対して一度、一連のステートメントを実行できます。

ニシキヘビ
数値: int128[5] = [1, 2, 3, 4, 5]

@external
def sum_numbers() -> int128:
    合計: int128 = 0
    範囲(5)のiの場合:
        合計 += 自己数値[i]    戻り値の合計

Vyperのループは while 、特定の条件が真である限り、ターゲットステートメントを繰り返し実行します。

ニシキヘビ
@external
def count_to_ten() -> int128:
    カウント: int128 = 0
    10<数えながら:
        カウント += 1
    戻り回数

Vyper でのエラー処理

プログラミングでは、ランタイムエラーを処理し、ユーザーに意味のあるエラーメッセージを提供するために、エラー処理が重要です。 Vyperはステートメント assert を使用してエラーを処理します。

ニシキヘビ
@external
def 除算(a: 10 進数、b: 10 進数) -> 進数:
    アサート b != 0, "ゼロ除算できません"
    A / Bを返す

上記のコードで、ゼロの場合 b 、「ゼロで除算できません」というエラーメッセージがスローされ、トランザクションが元に戻されます。 それ以外の場合は、分割操作に進みます。

Vyperは、 revert エラーメッセージを提供しながら、現在の呼び出しの実行を停止して状態の変更を元に戻すために使用できるステートメントも提供します。

以上が Vyper の構文と基本原則を簡単にまとめたものです。 他のプログラミング言語と同様に、Vyperを習得するための鍵は練習です。 私は、これらの手法を使用して単純なアプリケーションを作成することを提唱しています。 次のセッションでは、Vyperを使用してスマートコントラクトを構築および維持する方法について説明します。 目が離せない!

レッスン2無事終了おめでとうございます!あなたはVyperの構文と基本的な構造を理解する上で大きな進歩を遂げました。 Vyperの構文、基本的なデータ型、関数、制御構造、およびVyperのエラー処理の概要を説明しました。 これらの各コンポーネントは、Vyperプログラムの基盤であることを思い出してください。 これらのコアコンポーネントをしっかりと理解することが重要であり、そのための最良の方法は練習して探索することです。 今日学んだことを組み込んだ簡単なプログラムを作成します。 コーディングに関しては、実践的な経験に代わるものはありません。

将来的には、Vyperとのイーサリアムスマートコントラクトの世界に深く入り込む準備をしてください。 レッスン3では、より洗練されたVyperの原則を見ていきます。 より実践的なアプローチを取り、イーサリアムネットワーク上のスマートコントラクトの設計、実装、および相互作用に集中します。 ブロックチェーン技術の世界は広く、絶えず変化していることを理解してください。 ブロックチェーンエンジニアとして、発見と学習の旅は本当に終わることはありません。 あなたは習得への道を進んでおり、どんなに小さくても、前進するすべてのステップは一歩先を進んでいます。 あなたの素晴らしい努力を続けてください、そして私はレッスン3であなたに会います!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.