Solidityの型
Solidityには整数を扱うint, uint型、文字列を扱うstring型、アドレスを扱うaddress型、配列型、構造体を扱うstruct、key-valueを扱うmapping型があります。型は他のプログラミング言語とそう変わりないので一つでも言語を習得している場合はすぐに使いこなすことができると思います。
- int
- uint
- string
- address
- 配列
- struct
- mapping
intとuint
intは符号ありあり整数をuintは符号なし整数を扱うことができます。それぞれの型には8~256bitの間で8の倍数を指定することができ、指定しない場合は256bitがデフォルトとなります。
int a; // int256、初期値0 int32 b = -10; uint c; // uint256、初期値は0 uint32 d = 10; uint = -1; // コンパイルエラー
string
stringは文字列を入れることができます。文字列を代入できるだけで普通のstringと変わりませんが特殊な点が一つだけあります。
それはSolidityでは文字列の比較ができません。なのでkeccak256()という関数を使って16進数に変換したハッシュ値を比較します。
string dog = "hachi"; // ダメな例 if (dog == "hachi") {} // 正しい例 if (keccak256 (dog) == keccak256("hachi")) {}
address
address型とはEtherやトークンが紐づけられているウォレットのアドレスやコントラクトのアドレスを扱うことができます。address.send()、address.transfer()メソッドでETHを送金することができます。詳細は下記を参照してください。
【Solidity基礎】address.sendとaddress.transferの違い
配列
配列型は固定長配列と可変長配列を定義することができます。配列にはlengthよpushのメソッドがあります。Solidityにはpopやremoveといった要素を取り除く関数がありません。
int[] intArray = new int[]; intArray.push(1); intArray.push(2); intArray.length; // 2 int index0 = intArray[0]; // index0 = 1 int index1 = intArray[1]; // index1 = 2
基本的にSolidityでは要素を削除することができません。Ethereumの開発ミュニティでも議論されていてブログにもまとめてもらっていたのでぜひ読んでみてください!
struct
structは構造体を扱うことができます。使い方は見た目通りすごい簡単です。他の言語と変わらないかと思います。
struct Dog { string name; uint age; } Dog dog = Dog("hachi", 5);
struct特有の特徴として、struct内に複数の uint
がある場合、できる限り小さい単位の uint
を使うことで、Solidityが変数を一つにまとめることができ、ストレージを小さくすることができます。
ちなみにstruct以外でuint32などを定義してもuint
のサイズに関わらず256ビットのストレージを確保するのでガスコストの節約にはなりません。
下記の場合、MiniStructの方がガスコストを低く抑えることができます。
struct NormalStruct { uint a; uint b; uint c; } struct MiniStruct { uint32 a; uint32 b; uint c; }
mapping
mappingはキーバリューストアを扱うことができます。mappingも他の言語のMap型と使い方は変わらないです。msg.senderはコントラクトを実行した人のアドレスになります。
mapping (address => uint) accountBalance; //addressがキー、uintがバリュー accountBalance[msg.sender] = 100;
関連記事
【Solidity基礎】public, privateとexternal, internalの違いと使い所
【Solidity基礎】OpenZeppelinのOwnableについて
オススメの書籍
Ethereumを使ったDApps開発を学びたいなら今だとこの1冊が1番良いです!開発環境の構築から使うべきツール、フレームワーク、実装方法・注意点まで網羅的に解説されている書籍なのでおすすめです。出版も2018年1月ということでかなり新しい本で、DMM Bitcoinを作っているネクストカレンシー所属の方が書いているので信頼できます。
ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
intArray.push(1);
intArray.push(2);
としたのに
int index1 = intArray[0]; // index1 = 0
int index2 = intArray[1]; // index2 = 1
となるのは誤記でしょうか。
間違いですね。修正しました。
ご指摘ありがとうございます!