最近今までやるのを逃げてきたCryptoZombiesをやってます。
前提として、プログラミング経験まっさらだとキツイ気がするので、javascriptの勉強位はしておいた方が良さそうです。
ということでせっかく勉強するなら、どうせなので勉強記録を残していこうと思います。
まずは
pragma solidity ^0.4.19;
のようにSolidityのコンパイラのバージョンを宣言。まぁこれは他の言語でもよくあるやつですね。まだバージョン0.4なのかよ。。。w
次にコントラクトの宣言というやつです。
contract ZombieFactory{
}
この中にコントラクトの内容を書いていくよーっていうお作法的なものなのでここもこんなもんか程度でスルー。
いわゆる変数というやつ。
早速uint256やらuint32やらuint8やらなんかたくさん変数の型があるなぁって感じですね^^;
要するにコンピュータは0と1の二進法で動いていて1ビットに「0か1か」の情報が含まれていて、uint8だと8ビットまで表現できます。uint256だと256ビットまで表現できます。数字がデカければデカいほど、たくさんの情報を詰め込むことができるというわけです。
ちなみに8ビットだと「00000000」から「11111111」まで表現することが出来るので、0から255までの数字を表すことが出来ます。
FFとかドラクエでよく255という数字を見ますが、これはそれらパラメータがまさに8ビットで表現されているからですね。
わざわざuint32とかuint64みたいに分けないで、全部たくさん情報を詰め込むことができるuint256に統一すりゃいいじゃんとも思いますが、全部256ビットにするとメモリもたくさん使うし、さらにdAppsの場合、ブロックチェーンに記録する情報が大きくなるとその分、マイニングに支払う手数料も大きくなってしまうので、節約できるところでは小さいビット数を用います。
さぁ、構造体といういよいよプログラミングっぽい単語が出てきましたね。
しかし、恐れることはないです。要するに複数のデータを入れる箱を作っているだけです。
CryptoZombiesの場合だと、以下のように構造体を宣言しています。
struct Zombie {
string name;
uint dna;
}
Zombieという構造体をまず作り、この構造体の中にはnameとdnaを持たせています。ゾンビに関連する情報であるname(ゾンビの名前)とdna(ゾンビのDNA)を構造体の中でまとめて扱えるようにしておけば、個別のゾンビたちのデータはあとからこの中にぶち込んでいくだけでいいので、手間が省けます。
配列の宣言は他の言語と特に変わらんので、割愛。以下のようにZombie構造体を使ってzombiesっていう配列を作るよと書くだけです。
Zombie[] public zombies;
ただ、publicとかいう謎の文字が出てきますね。これについては1-9でまとめて書きます。
関数の宣言についても、他の言語と同じ書き方なので特に言うことはないですね。引数の最初に_(アンダースコア)をつけるのが慣例らしく、これはSolidityならではですね。
今日はこのへんで。
それでは良いゾンビ生活を!
【twitter】https://twitter.com/nogacrypto?lang=ja
【voicy】https://voicy.jp/channel/545
【note】https://note.mu/nogacchi