Solidity ゲームで学ぶ CryptoZombies レッスン1その2

zo1
遊戯王みたいですね!イーサリアムの言語「Solidity」をゲーム感覚で学べるCryptoZombies
こんにちは、ノリヒロです。
イーサリアムの創業者ヴィタリック氏が、スケーリング問題を軽量化する「Plasma Cash」を発表しましたね。あまりに早くて追い付いていけませんが、着実にSolidityを学んで行きますよ~今回は第2回になります。

CryptoZombies レッスン1 その2

前回CRyptoZombiesで教わりました。
①コントラクト
②コードを書くとき、初めに挿入する Vresion pragma
③コントラクト内に状態変数が入っている
コードを本格的に書くのはこれからですかね。

チャプター5:構造体

ch5
“struct””は、構造体だそうです。
なるほど、struct 〇〇 で、〇〇がどんなデータ型をもっているかを表現するわけですね。
“string”は、”text”と同じ使い方、”文字”ということですね。
“UTF-8″は、文字コードです。簡単にいうと、世界中の様々な文字を数値データで表し、国、言語等関係なく同じ文字を表現する機能でしょうか。

テストですね。
zo2

前回は7番目まで書きました。今回は8番目からです。
“zombie”という構造体を作るとのことですので

struct Zombie {
string name;
uint dna;
}

これが答えですね。
ちなみに”{ }”は波括弧と呼ばれています。この中にデータを入れていくわけですね。
”{”以下の段落のスペースも重要ですね。
“struct{ “のあとの下段は、4つほどスペースが空いて始まっています。この4つのスペースが続く間は、”Struct{“の中身のことだという認識でいましょう。
“{” で始まったら “}” で終わります。

チャプター6:配列

ch6
次は配列ですね。

いきなり難しくなってきました。この落差はなんだろうか…。Solidityには2種類の配列が用意されているそうです。
”””固定長配列”と”可変長配列”です。
何種類のどういったデータを保管できるかということですかね。
uint[2] fixedArray;uint(符号なし整数)型の固定長配列2つ
string[5] stringarray;5つの固定長文字列を格納
uint[] dynamicarray;数字がないので無限、決まったサイズなし

「配列をpublicで宣言すれば、Solidityが自動的にGettterメソッドを作成するぞ!」と言われても???なんでけど…。getterメソッドとは、ある特定のフィールドの値を呼び出すメソッドです。ということは、配列で”public”を記入しておけば、他のフィールドで制限がかけられていたとしても、値を読みだすことができるということですかね。難しい。ではテストです。
at
これは比較的かんたんですかね。パブリック配列の Zombie 構造体なので Zombie[] public 名前が zombiesなので Zombie[] public zombies; となります。

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

2
Solidityでは、関数を”function”を使って定義するのですね。
“eatHamburgers”という関数は、”string_name”と”uint_amaount”
という2つのパラメータを持つと。
いきなりグローバル変数という言葉が出てきました…。グローバル変数とは、1つの関数に限らず、どこからでも参照できる変数ということです。なので、逆の意味を表すアンダースコア( _)をつけると、「その関数」のみでしか使えない変数ということになります。ふう、これ素人にはチュートリアルじゃないような気がしますね…。
さて、テストです。
test
関数を作るので”function”を使いますね。
あとは、パラメータ、ローカル変数を使って書いていきます。
anser
function createZombie(string _name, uint _dna){
}
答えです。最後の”{}”は、まだ中身がないので空です。

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

1
だんだんややこしくなってきました。

struct Person{
uint age;
string name;
}

Person[] public people;

”Person”は、age(年齢?)とname(名前)からできる構造体。その構造体は”people”から参照できる。ということですかね。

それでは、新しい”person”を作成して”peo
ple”配列に追加します。ちなみに、”//”ダブルスラッシュは、プログラムを他の人に読んでもらう際の注釈です。日本語で書いてもOKです。わかりやすくするためですね。//以降の文字は、プログラミングには反映されません。

//新しいPersonを作る:
Person satoshi = Person(172,”satoshi”);
satoshiという172歳の”person”ですね。

//それを配列に格納する:
people.push(satoshi);
わかりやすいですね、satoshiをpeopleにpushする、と。

1行でも書けるみたいですね。
people.push(Person(16,”Vitalik”));
ヴィタリックという16歳を”people”に格納する、ですね。なお、push関数は、追加した順番に要素に番号が振られるようです。呼び出す際は注意ですね。

ではテストです。
test
新しいzombieは zombie( _name, _dna)で表せますね。
それをZombiesに格納する訳ですら
zombies.push(Zombie(_name,_dna))となります。
あとは、これをcreateZombie関数内に当てはめれば完成です。

function createZombie(string _name, uint _dna){
zombies.push(Zombie(_name,_dna));
}

これでcreateZombie関数が完成です。

今回のまとめ

今回はチャプター5~8まで行いました。
1チャプターが難しいので、なかなかレッスン1が終わりません。

チャプター5:構造体”struct”
チャプター6:配列・集合体(pythonではリストのこと)
チャプター7:関数”function”
チャプター8:新しい”struct”をリストに格納する

いかがでしたでしょうか。
ようやく6割程度終わった感じです。少なくとも、ある程度プログラムの言葉の意味を把握していないと、理解できない内容がありますね…。まだ最初です、あきらめず頑張っていきたい。

ただ、やはりPythonと似ています。Pythonは解説本自体が沢山出ています。そちらをさらっとでも読んでから取り組むと理解度が深まるのは間違いないと思います。

ここまで読んでいただいた方、お疲れ様でした。
少しはSolidityの雰囲気がつかんでいただけたら幸いです。
ありがとうございました。

コメント