🧟‍♂️

【solidity初心者向け】CryptoZombiesをもっと丁寧に解説!(レッスン1-7, 1-8)

2022/04/12に公開

前回に続いてCryptoZombiesを「より詳しく」解説していこうと思う。

「CryptoZombies難しい・・・」と悩んでいる人を見かけたら、本記事のシリーズを紹介してもらえると嬉しい。

そして、悩んでいるあなたにも有益な記事となることを願っている。

この記事の対象者

この記事の対象は以下のような方である。

  • solidityを始めてみたけど、CryptoZombies難しい
  • なんとなく分かったが、ちゃんと理解できてない部分もある

あくまで理解がなかなか追いついていない人向けの記事だということを理解いただきたい。

解説するチャプター

今回解説するのは、レッスン1のチャプター7とチャプター8である。

▼ チャプター7のURL
https://cryptozombies.io/jp/lesson/1/chapter/7

この記事で得られること

この記事ではざっくりと以下のことが学べる。

  • 関数の書き方
  • 構造体の初期化方法
  • 配列の操作方法

それではさっそくやっていこう。


チャプター 7: 関数の宣言

このチャプターでは、ゾンビを生み出す関数を作成していく。

先にこのチャプターでの答えを載せておくので、参考にして頂きたい。

pragma solidity ^0.4.19;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;
    
    // ゾンビを生み出す関数を作成
    function createZombie(string _name, uint _dna) {

    }
}

✅ 関数の書き方

solidityではfunctionキーワードから関数を始める。

// ゾンビを作成する関数
function createZombie(string _name, uint _dna) {
  // この中に関数の処理を記述する
}

注:グローバル変数と区別をつけるために、関数パラメーター変数名はアンダースコア(_)をつけるのが通例(必須ではありません)です。このチュートリアルでは通例に従います。

と書いてある通り、仮引数(変数)にはアンダースコアをつけるのが通例らしい。


チャプター 8: 構造体と配列の操作

このチャプターでは、実際にゾンビを生み出し、配列に追加していく。

先にこのチャプターでの答えを載せておくので、参考にして頂きたい。

pragma solidity ^0.4.19;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    // ゾンビ構造体
    struct Zombie {
        string name;
        uint dna;
    }

    // ゾンビを格納する配列
    Zombie[] public zombies;

    function createZombie(string _name, uint _dna) {
        // ゾンビを作成し、配列に追加する
        zombies.push(Zombie(_name, _dna));
    }
}

✅ 構造体から実態を作成するには?

"初期化"などと言うことがあるが、構造体から実際のゾンビを作っていく。

// 新しいゾンビを作る
Zombie zombieA = Zombie("ゾンビA", 123);

これは「ゾンビA」という名前で、「123」のDNAを持つゾンビである。
これで構造体から実際のゾンビ(ゾンビA)が作成できる。

✅ 配列に追加するには?

↑で作った仮のゾンビ(ゾンビA)を配列に追加してみる。

// ゾンビを格納する"zombies"という名前の配列
Zombie[] public zombies;

// zombiesにゾンビAを追加
zombies.push(zombieA);

✅ 1行で書くか分けて書くか

ちなみに、以下の2つの書き方はどちらも同じ意味になる。
どちらの書き方でもOKだが、CryptoZombiesでは後者を採用している。

▼ 2行に分けて書く

Zombie[] public zombies;

// 新しいゾンビを作る
Zombie zombieA = Zombie("ゾンビA", 123);

// zombiesにゾンビAを追加
zombies.push(zombieA);

▼ 1行でまとめて書く(CryptoZombiesはこちら)

Zombie[] public zombies;

// 新しいゾンビを作って、zombiesにゾンビAを追加
zombies.push(Zombie("ゾンビA", 123));

ここまでできたら、今回はOK。

お疲れ様でした。


まとめ

今回は

  • 関数の書き方
  • 構造体の初期化方法
  • 配列の操作方法

を紹介しました。
いかがだったでしょうか?

間違っていたり追加した方がいいことがあったらコメントをして頂きたいです!
皆さんにより良い情報を届けたいので、必要に応じて修正していきます。

それでは引き続き解説出すので、そちらも参考にしてください!!

Discussion