Solidityの基本的な文法まとめ
はじめに
今日は、Solidityの基本的な文法を一通り紹介していきたいと思います。
とはいえ、繰り返しですが、僕がブログに書く事なんて、Crypto Zombies の足下にも及ばないですからね!
こんなブログを読んでる暇があったら、 Crypto Zombies をやろう!(笑)
Version Pragma
pragma solidity ^0.4.24
コンパイラのバージョン指定を行います。指定されたバージョン以外のコンパイラではコンパイルされない事を保証します。
つまり、指定しなくても動きます。(たぶん)
上の例では、「0.4.24以上、0.5未満のコンパイラで、どうぞよろしく!」という意味ですね。
バージョンの幅の指定方法は、まあ、おなじみの記法になっております。
Import
import "some.sol";
上記の例は、対象のファイルをそのまま丸ごと取り込むようなイメージです。
ES6よろしくな import
記法もサポートされていて、状況に合わせて様々なインポート方法を選ぶことができるみたいです。
// some.solの中身をsomeに格納
import * as some from "some.sol";
// ES6的ではないけど、上記と同じ意味で
import "some.sol" as some;
// someの中からsymbol1と、symbol2をaliasという名前でインポート
import { symbol1, symbol2 as alias } from "some.sol";
ファイルのパスは、相対パスと絶対パスの違いがあるらしいけど、まあ、そこはいい感じに雰囲気で指定してほしい。
Contract
そもそも、「Contract
って何よ?」って話だと思いますが、他言語で言うところの、Class
であるとか Interface
であるとかを足して2で割ったくらいのイメージでいいと思います。難しい事は考えない主義で!
State Valiables
Contract直下の変数は、基本的にはすべてブロックチェーンに記録されるようです。
また、Solidityは静的な型付け言語のため、変数の定義時に必ず型の指定が必要です。
contract Human {
// この変数を変更すると、それはブロックチェーン上に記録されます
// つまり、この変数を変更するには、ガス料金がかかるのであります
string name;
}
Function
まあ、みんながよく知る関数ですね。注意点としては、「アクセス修飾子は後ろに書く」という事でしょうか。後述しますが、Solidityでは、関数の修飾子は全て後ろに並べます。
contract Human {
// 引数とか、返値の型の指定も必須
function say(string text) public returns (string) {
return text;
}
// 返値に名前をつけられるが、これってドキュメント以上の利用方法って何かあるのかしら?
function eat(string food) public returns (string food) {
return food;
}
}
Modifier
Solidityでは、関数の修飾子を自分で定義する事ができるようになっています。
「修飾子」っていうのは、関数の実行の前後に処理を差し込んで、関数の挙動を制御するためのものです。
contract Human {
bool washedHand = false;
uint hangry = 0;
modifier needWashedHand() {
// さらっと登場しましたが、まあ、assert的なものです
// 条件を満たさない場合にエラーを発生させます
require(washedHand == true);
// `_;` の記述は必須で、元の関数をどのタイミングで呼び出すかを制御している
_;
}
// 引数を取る事も可能
modifier needHangry(uint _hangry) {
require(hangry >= _hangry);
_;
}
function eat(string food) public needWashedHand needHangry(50) returns (string food) {
return food;
}
}
Struct
変哲もない構造体やな!
contract Human {
struct Parameters {
uint height;
uint weight;
address account;
}
}
Enum
列挙型ですな。
contract Human {
enum State { Live, Dead }
State state = State.Dead;
}
さいごに
一通り、Solidityの基本的な文法に関してまとめてみました。
今回 Event
に関してはタッチしなかったのですが、別の記事で切り出して解説をしたいなあと思っています。
あと、変数の型に関しても、ブロックチェーン特有の型があるので、別記事で紹介させてください。