実際に書いてみる!Solidityでmappingを使う方法【初心者向け】
初心者向けにスマートコントラクト開発に使われる言語Solidityでmappingを使う方法について詳しく解説しています。Ethereum上にアプリケーションを作成したい場合はSolidityを使用しますが、書き方を理解しておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回は、Solidityでmappingを使う方法について解説します。
スマートコントラクトの実装を行う際に頻出なので、ぜひ書き方を覚えておきましょう。
今回は、Solidityのmappingについて勉強しよう。
田島メンター!mappingというのは何ですか~?
mappingはSolidityでの配列のようなものだね。まずは基本の書き方を説明するよ。
お願いします!
mappingとは
mappingとは、Solidityで使用する配列のような機能です。
Solidityとは、Ethereumでコントラクトコードを実装する際に利用するプログラミング言語の名称で、スマートコントラクトを実行するために必要なコードです。
ブロックチェーンとは、仮想通貨等の取引データを分散して管理する仕組みのことです。ブロックチェーン単体では、仮想通貨の取引や、取引履歴の確認を行うことができます。
そのスマートコントラクトの機能を実装するには、Solidityというコントラクト指向言語を使用します。
配列とは、値を入れる箱なのですが、箱の中身をいくつかの部屋に分けることで、1つの箱に複数の値を入れることができるプログラムの基本的な仕組みです。
配列で重要考え方として、値が入っている部屋を数字で表すということです。そして、一番最初の値が入っている部屋を0で表示します。つまり、0号室に1番目の値が入っているということです。
1番目の値なのに、0番目の部屋に入っているという意味になるのですが、この前提を抑えることで配列という概念を理解することができます。
mappingの書き方
基本構文
mapping(key => value) public ステート変数名
解説
mappingと記載することで、mappingを利用した配列のような処理が可能になります。
(key => value) では、配列の0号室というkeyに1番目の値というvalueが入ることを意味しています。
publicはアクセス修飾子を指定しています。
ステート変数名とは、オブジェクト指向言語で言うインスタンス変数のようなものです。
アクセス修飾子
アクセス修飾子とは、どの位置からアクセス可能であるかを設定するものです。
アクセス修飾子には4つの種類があります。
public
publicで指定された場合は、指定した場所(内部)からも、指定していない場所(外部)からもアクセス可能です。
private
privateで指定した場合は、そのcontractからのみアクセス可能です。
external
externalで指定した場合は、指定していない場所(外部)からのみアクセス可能です。
internal
internalで指定した場合は、そのcontractと、そのcontractの子からアクセス可能です。
子という概念はプログラミング独自の概念です。
そのプログラム自身を親と考え、自身を元に派生して実装された部分を子と考えます。
mappingの基本の形と、アクセス修飾子についてだよ。
上の基本構文例の”public”の部分がアクセス修飾子で、その内容によってどこからアクセスできるかを指定するんですね。
次に、実際の例でmappingの書き方を確認してみよう。
mappingを実際に書いてみよう
銀行口座管理用のmappingコード
pragma Solidity ^0.4.11 contract BankAccount struct User { address addr; unit amount; } mapping(unit => User) public Users;
解説
1行目のpragma Solidity ^0.4.11では、Solidityプログラムを宣言しています。
2行目のcontract BankAccountでは、銀行口座を意味するBankAccountのcontract作成を意味しています。
3行目のstruct User {では、struct型の銀行口座の名義人Userを意味しています。
4行目のaddress addr;では、名義人のアドレスを意味しています。銀行口座で言うと口座番号のイメージです。
5行目のunit amount; では、口座残高を意味しています。
6行目の}では、3行目の処理を終了することを意味します。
7行目のmapping(unit => User) public Users;では、mappingにより、配列のようなイメージでmappingによる値の格納を宣言しています。
ここでは、keyにunit型、valueには、User型で設定した構造体の内容を格納しています。
今回は、Solidityでmappingを使う方法について解説しました。
実際にコードを書きながら理解していきましょう。
mappingの具体的な記述例を見てみたよ。
ここでのstructというのは何を指すんですか?
これは型のひとつで、構造体を扱うものなんだ。データ型についてもおさらいしておこう。
分かりました。ありがとうございます!
この記事を監修してくれた方
中本賢吾(なかもとけんご) 開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。 その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。 |