NFTやブロックチェーンを扱うのに必要なプログラミング言語である「Solidity」。
Solidityはプログラミング言語の中でも非常に難しい部類に入るみたいです。
僕も、Solidityを初めて触ってCryptozombiesをやってみたのですが、最初は面白くて良い感じだな〜って思ってはみたものの、中身で何をやっているのかいまいちよくわからない!
※CryptozombiesはSolidityのProgateみたいなものです。
Progateといえば、最近ではプログラミング学習の登竜門になっていますよね。
Solidity学習で僕が特に苦戦したのは、Mappingです。
プログラミングは言語なので一個一個の単語がおこなっているものの意味を理解しないと進むことができませんが、
そのMappingについて、みなさんにも理解していただけるように解説して行きたいと思います。
Contents
NFTやブロックチェーンのプログラミング解説:Mappingについて
Solidityは主にスマートコントラクトを記述する際に使われる言語ですが、スマートコントラクトを記述する際に色々な数を暗号化する必要があったり、変換する必要がありますね。
スマートコントラクトとは、ブロックチェーン上で自動的に動作をしてくれる仕組みのことで、ブロックチェーン上で色々な取引などを正確に行うために重要な技術になります。
ブロックチェーンやスマートコントラクトについても解説しています。
mappingはsolidityのさまざまな種類の言語の中でも、値を参照するのに使われるもので配列だったりハッシュテーブルみたいなものです。
書き方はこのようになります。
mapping (uint => address) public Names;
addressやuintというのは状態変数で、
addressはアドレス型の状態変数、uintは整数型の状態変数です。
publicはアクセス修飾子といい、その関数へのアクセスの範囲などをあらわすものです。
状態変数、アクセス修飾子についても、このサイトで解説して行きます!
現在はこちらのサイトをぜひ参考にしてみてください。
※状態変数の解説をしているサイトは存在しないため、お待ちください。
Namesはステート変数名といって、関数の名前のように、mappingの名前表します。
Namesにブロックチェーンでも使うwalletのアドレスなどを入れたりすることで、そのキーを元に全く別の整数を返すと言うのがmappingです。
mappingの特定の値にアクセスするためには、キーをステート変数名とともにこのように使用する必要があります。
Names[counter]
counterがキーとなります。
Mappingを具体的に書いてみる
それでは、実際にmappingでどのようにキーを入れて、特定の値にアクセスをするのか。
例を見てみましょう。
まずはmappingを書いてみます。
mapping (address => uint) highscores;
そして、このようなテーブルを用意します。
address | highscore |
mappingにキーを入力し、値に対応した数値にアクセスし、その関係を表に埋めていきます。
mapping (address => uint) highscores;
address playerOne = “0xf39Fd6e51aad23F6F4cdafaa927279cggFb91166”;
highscores[playerOne] = 800;
このようにしてアクセスすることができました!実際に表を埋めてみると、
address | highscore |
playerOne | 800 |
キーに対応している値がわかりやすく整理されました。
なかなかmappingについてこのような対応について記述している参考書やサイトがなく、筆者は大変苦労しました笑
参考にしたサイトや書籍は以下にまとめましたので、参考にしてみてください。
Solidityやmappingの参考になる書籍やサイト
ちなみに、Solidityの参考となる日本語の書籍はこちらがあります。
体系的に勉強したい方はおすすめ。英語を翻訳している書籍ですので少しわかりづらいところはありますが、ページ数は程よく、読みやすいです。
ちなみに、Mappingについて参考になるサイトもあります。※英語サイトです。
Understanding Mapping vs. Array in Solidity
https://www.devtwins.com/blog/understanding-mapping-vs-array-in-solidity
やはり、まだまだ英語の方が情報がたくさんあるので、英語が読めるようになると情報をあつめやすくなります。