はい!それではレッスン3を始めたいと思います!!スタート画面は文章長すぎて切れておりますが、、、そのあとは準備はいいか?との事なのでOKとしましょう!!
地味な作業になるから、へこたれるなよ!と言ってくださっておりますので、めげずにやり遂げましょう!!
CryptoZombies | イーサリアムでのゲーム開発を学ぶ
チャプター1:Immutability of Contracts
ぐぐぐっ、、、初っ端から重たすぎるボディブローを受けているようだ、、、
immutabilityってなんなんだよ?という事ですが、Google翻訳さんによると「不変性」という事で、変えることができない状態の事を指しています。
という訳で本文へ。
ちょいとお待ちよ、奥さん!!w
実行すると編集も更新もできないってどういうこっちゃ!!
例えばゲームにしてもアプリにしても、更新してバグ等を直す必要があるじゃないですか!!
編集も更新もできないってなると、まずいじゃないの??というのが本心です!
けどブロックチェーンってそもそも、改ざんできない(絶対できない訳ではないが、、、)という素晴らしい本質があります。「予期しない結果を生じさせることもない。」というのはそういう事であって、作成した処理以外は起こり得ない=バグが発生しないって事ですよね。なぜなら、全て信頼できるネットワーク上のデータだから。。
そうかそうか、、今までのアプリの感覚でいる事自体が考え方として全く違うんだね、、、そもそもプラットフォームが違うってことか、、、(言ってみたかったw)
えっ、、、、、Dappってそういう事!?w
今までのプログラミングの考え方で行くと、Solidityってかなりシンプルなプログラミングになるって事になりませんか???????
いちいち、この処理をしたらこうなる可能性も考えて、こうこうして、こうこう、、、、って考える必要がなくなるから。。
まぢでっ!!???
、、まぁまぁプログラミング初心者がそんな事考えても仕方ないですね。
続けましょw
はい、ここでも知らない言葉が飛び出してきましたね!!
ハードコードってなんじゃい??という疑問には、以前からご利用させていただいている佐々木真先生のブログから引用したいと思います。ハードコード(ハードコーディング)に関しては、、
こちらの場合、消費税を例にあげています!前は5%だったけど今は8%で、もしかしたら10%になるかもしれないという、消費税です!
この例の場合、上記は消費税という名前の関数を定義して、その中に0.08を代入して、その関数を使って計算しているのに対し、下記は関数の定義はせず、そのまま計算式に0.08と入力し、処理させている状態です。
結果としては、どちらでも同じ結果が出るので、何故この作業をハードコードと言うかというと、まず、0.08という数値が何を意味しているかが不明確である、という事と、今後変更された際に、全ての計算で使用した0.08という数値を手直ししなければならない、という理由があるからです。
日本人なら0.08が掛け算で使われていたら、消費税8%だもんな〜と気づけるかもしれませんが、他の国の人だったら、何の数字なんだ!?とパニックになると思われます。0.08ではなく、1とか2の場合だったら、誰でもパニックになるんじゃないでしょうか。。
この計算は何がしたくてこの数値を使っているんだ??と余計に思考を働かせなきゃなくなるので、プログラマ界隈ではハードコードを使っていると、ヘボプログラマと呼ばれるみたいですねw
こういう考え方の意識をつけるっていうのは、結構大切なんですね。気をつけていきましょうね!
かくいう日本人って、空気を読む、という事には長けているため、説明しなくてもわかるよな?というような威圧的なオーラを出してくる上司なんかたくさんいますよねw
けどプログラミングに関しては、しっかりとわかるように説明しないと、機械には伝わらないしエラーとして吐かれるだけですからね。空気感で仕事をするのは大事かもしれないけど、この世界はそれじゃ全然通用しないので、普段からもしっかりと全て伝えることが大事だと改めて感じさせられますな。
さてさて、話の続きに戻りましょうw
ほうほう、、大事な部分に関しては更新できる機能はあるという事ですね、、、
CryptoKittiesのコントラクト自体をハードコーディングする代わりに、関数を設定しておけば、アドレスが変更できるって事か、、、なるへそ!
って事は、今からやる作業は、CryptoKittiesのアドレスをハードコードしていたのを、CryptoKittiesのコントラクト自体をハードコードするって事になりそうですね!
それを踏まえて、、テストだ!!
ふむふむ、、直接的なアドレスは削除すればいいので、、
1での回答としては「address ckAddress = …..;」を削除してあげればよいだけですね。
2では、ただ宣言するだけでいいという事なので、KittyInterfaceはいらないって事ですな。
KittyInterface kittyContract;
だけにすればよいですね。ckAddressも「1.」で削除してますし。
3では、関数作成せよ。と言ってますね、引数を設定し、external関数で設定という事なので、、、
function setKittyContractAddress(address _address) external {
}
となりますな。
4では、AがBと同等になるように設定せよ、なので、「同等=代入する」の意なので、、、
例:A = B;なので
kittyContract = KittyInterface(_address);
3と4をまとめると、、
function setKittyContractAddress(address _address) external {
kittyContract = KittyInterface(_address);
}
となります!!!
おぉ〜!なんとなくで進めてやった部分でしたが、ブログに書いたら理解できた気がする!
ハードコードに関してはその時も調べたけど、そこまでの理解はできてなかったからよかったわ〜!!
ってかチャプター1でこの長さってやべぇ〜ですなw
その分理解が深まっているから良しとしなければね!
っていう事で本日昼の部はここで終了します!!
英語リーディングの勉強も兼ねて、英語版のCryptoZombiesのレッスン1から始めてみますから!
やりながら先日紹介した本も見ながらですな。
本の紹介はこちらね!
いやはやいやはや、、、内容があっちっちですなぁ。
本にしたら大分厚くなって参りましたな!
けど覚えていくと面白さも増すから楽しいですな!
明日もサクサク更新していきますので、同志のみなさんも頑張っていきましょう!
ちなみに、、、この考え方間違っているよ!と思った方、もしいらっしゃいましたら、是非とも厳しいご指摘いただければと思います。
わからず進んでどうにかなるさ精神でやっているので、あとで気づく事もありますが、まだまだ気づくには早い段階なので、指摘があればどしどし言ってもらえるとこちらとしてもありがたいです!
名前バレしたくない方でしたらPeingの方でも質問など受付してますので、ぜひともコメントください!
Peingで匿名の質問はこちら☑︎
CryptoZombies | イーサリアムでのゲーム開発を学ぶ
今日のところはこれまで!!
それではまた明日!!