【Solidity基礎】型の種類




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

Solidityの型

Solidityには整数を扱うint, uint型、文字列を扱うstring型、アドレスを扱うaddress型、配列型、構造体を扱うstruct、key-valueを扱うmapping型があります。型は他のプログラミング言語とそう変わりないので一つでも言語を習得している場合はすぐに使いこなすことができると思います。

  • int
  • uint
  • string
  • address
  • 配列
  • struct
  • mapping

intとuint

intは符号ありあり整数をuintは符号なし整数を扱うことができます。それぞれの型には8~256bitの間で8の倍数を指定することができ、指定しない場合は256bitがデフォルトとなります。

string

stringは文字列を入れることができます。文字列を代入できるだけで普通のstringと変わりませんが特殊な点が一つだけあります。

それはSolidityでは文字列の比較ができません。なのでkeccak256()という関数を使って16進数に変換したハッシュ値を比較します。

address

address型とはEtherやトークンが紐づけられているウォレットのアドレスやコントラクトのアドレスを扱うことができます。address.send()、address.transfer()メソッドでETHを送金することができます。詳細は下記を参照してください。

【Solidity基礎】address.sendとaddress.transferの違い

配列

配列型は固定長配列と可変長配列を定義することができます。配列にはlengthよpushのメソッドがあります。Solidityにはpopやremoveといった要素を取り除く関数がありません。

基本的にSolidityでは要素を削除することができません。Ethereumの開発ミュニティでも議論されていてブログにもまとめてもらっていたのでぜひ読んでみてください!

Solidityで配列の任意のデータを削除できない理由

struct

structは構造体を扱うことができます。使い方は見た目通りすごい簡単です。他の言語と変わらないかと思います。

struct特有の特徴として、struct内に複数の uintがある場合、できる限り小さい単位の uintを使うことで、Solidityが変数を一つにまとめることができ、ストレージを小さくすることができます。

ちなみにstruct以外でuint32などを定義してもuintのサイズに関わらず256ビットのストレージを確保するのでガスコストの節約にはなりません。

下記の場合、MiniStructの方がガスコストを低く抑えることができます。

mapping

mappingはキーバリューストアを扱うことができます。mappingも他の言語のMap型と使い方は変わらないです。msg.senderはコントラクトを実行した人のアドレスになります。

関連記事

【Solidity基礎】public, privateとexternal, internalの違いと使い所

【Solidity基礎】OpenZeppelinのOwnableについて

【Solidity基礎】storageとmemory

オススメの書籍

Ethereumを使ったDApps開発を学びたいなら今だとこの1冊が1番良いです!開発環境の構築から使うべきツール、フレームワーク、実装方法・注意点まで網羅的に解説されている書籍なのでおすすめです。出版も2018年1月ということでかなり新しい本で、DMM Bitcoinを作っているネクストカレンシー所属の方が書いているので信頼できます。

ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



2 件のコメント

  • intArray.push(1);
    intArray.push(2);
    としたのに
    int index1 = intArray[0]; // index1 = 0
    int index2 = intArray[1]; // index2 = 1
    となるのは誤記でしょうか。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です