【solidity初心者向け】CryptoZombiesをもっと丁寧に解説!(レッスン1-5, 1-6)
前回に続いてCryptoZombiesを「より詳しく」解説していこうと思う。
「CryptoZombies難しい・・・」と悩んでいる人を見かけたら、本記事のシリーズを紹介してもらえると嬉しい。
そして、悩んでいるあなたにも有益な記事となることを願っている。
この記事の対象者
この記事の対象は以下のような方である。
- solidityを始めてみたけど、CryptoZombies難しい
- なんとなく分かったが、ちゃんと理解できてない部分もある
あくまで理解がなかなか追いついていない人向けの記事だということを理解いただきたい。
解説するチャプター
今回解説するのは、レッスン1のチャプター5とチャプター6である。
▼ チャプター5のURL
この記事で得られること
この記事ではざっくりと以下のことが学べる。
- 構造体とは何か?
- 配列の書き方
それではさっそくやっていこう。
チャプター 5: 構造体
このチャプターでは、ゾンビ構造体を作成していく。
先にこのチャプターでの答えを載せておくので、参考にして頂きたい。
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
// Zombie構造体は"名前"と"DNA"を持っている
struct Zombie {
string name;
uint dna;
}
}
✅ 構造体とは何か?
他の言語をやったことがあれば分かる人もいるかと思うが、「複数のデータをまとめた1つの箱」のようなものである。
✅ 構造体の書き方は?
今回はゾンビ構造体を作成する。
// ゾンビ構造体
struct Zombie {
string name; // 名前
uint dna; // DNA
}
ゾンビは名前とDNAを持っている。
構造体を使わないと、名前とDNAがバラバラになって、どのゾンビがどの名前でどのDNAか分からなくなる。
solidityではこの「構造体」を使ってデータをまとめて管理していく。
そして、構造体の中に入っているデータはプロパティ
やフィールド
と呼ばれる。
↑のコードを言語化すると、
「ゾンビ構造体の中に、名前フィールド(プロパティ)とDNAフィールド(プロパティ)を作成」
となる。
※多くの人は分かると思うが、string
は文字列を表す型である。
チャプター 6: 配列
このチャプターでは、ゾンビを複数格納する配列を作成していく。
先にこのチャプターでの答えを載せておくので、参考にして頂きたい。
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
// ゾンビを複数格納する配列を作成
Zombie[] public zombies;
}
✅ 配列とは何か?
配列とは、データを複数格納する箱のようなイメージである。
今回は、先ほど作ったゾンビを複数格納する配列を作成する。
今後、この配列の中に生み出したゾンビたちをどんどん収容していく。
("列"と名前がついている通り、1列に並んでいるイメージをしてもらうのが良い)
✅ "固定長"配列とは何か?
固定長配列とは、文字通り「入ることのできる数が決まった配列」である。
3つしか格納できない配列に4つ目を追加しようとするとエラーになる。
以下の例は、文字列が5個までしか入らないfruits
という名前をつけた配列である。
// 固定長配列の書き方
string[5] fruits;
✅ "可変長"配列とは何か?
可変長配列とは、"固定長"の逆で、どれだけでも格納することができる配列である。
定員は決めず、「来るもの拒まず」な配列だ。
// 可変長配列の書き方
string[] fruits;
✅ publicとは何か?
public
と付けることで、他のコントラクトからもこの配列を参照することができるようになる。
そのほかにもprivate
などもあるが、チャプター9で紹介するので、その時に理解すればOK。
いまは「他のコントラクトからも見れるんだな」くらいの理解で大丈夫。
// 可変長配列の書き方
string[] public fruits;
ここまでできたらOK。
お疲れ様でした。
まとめ
今回は
- 構造体とは
- 配列の書き方
を紹介しました。
いかがだったでしょうか?
間違っていたり追加した方がいいことがあったらコメントをして頂きたいです!
皆さんにより良い情報を届けたいので、必要に応じて修正していきます。
それでは引き続き解説出すので、そちらも参考にしてください!!
Discussion