Ethereum

Solidityの条件分岐(if-elseb文)、繰り返し処理(while文等)、イベントを紹介

はじめに

今回はSolidityの基本文法である条件分岐(if-else文)、繰り返し処理(while文・do-while文・for文・break文・continue文)、イベントについて紹介します。繰り返し処理には非常に多くの種類があることがわかります。一つ一つ丁寧に見ていくので心配せずに勉強をすすめることができます。

SolidityはJavaScriptに似た記述をするため、JavaScriptに精通している方には見覚えのある基礎文法かもしれません。

まず、Solidityの基礎文法をしっかり抑えて今後のsolidityを使った実装をスムーズに行えるようにしていきましょう。

また、前回の記事をまだ読んでいない方はこちらからお読みください。

 

solidity条件分岐(if-else文)

Solidityでは、JavaScriptの条件分岐(if-else文)の記述方法と類似した構成になります。if-else文は設定した条件を満たす場合に設定した処理を実行するといった構造を持ちます。

if-else文では、設定した条件を満たした場合、trueとなります。一度trueとなった場合、それ以降の処理は行われません。以下の処理は行われません。命令aが行われた場合は命令bと命令cは行われません。また、条件式bと条件式cのelse文は省略が出来ます。

しかし、条件を満たすものがなく全てfalseの場合は処理は実行されません。

if (条件式a) { //条件式1がtrueならば命令aを実行
命令a;
} else if(条件式b) { //条件式bがtrueならば命令bを実行
命令b;
} else { //すべての条件式がfalseの時命令cを実行
命令c;
}

solidityでは条件演算子は「? : 」を使って記述することが出来ます。

条件式 ? 条件がtrueの場合に行なう処理 : 条件がfalseの場合に行なう処理

 

solidity繰り返し処理(while文・do-while文・for文・break文・continue文)

先ほど紹介した条件分岐同様、繰り返し処理もSolidityはJavaScriptに類似した構造になります。

while文/do-while文

while文は設定した条件を満たし、trueである限り処理を継続して行う構造を持っています。また逆に条件を満たし続けない場合、ずっとfalseとなり一度も処理は行われません。そのため、最初からfalseの場合、なにも処理されません。

do – while文では、whileと違う部分として最低1度は処理が行われる性質を持ちます。

以下がwhile文の記述例となります。

while(条件式a) { //条件式aが満たされている場合、繰り返し処理が続く。
命令a;
}

 

以下はdo-while文の記述例となります。

do { //少なくとも1度は必ず処理が実行される
命令b;
} while(条件式b); //ここで条件式の検証が行われる

 

for文

基本的なことですが、for文では先ほど紹介したwhile文とdo-while文よりも自由度の高い繰り返し処理を記述することが可能です。

for文は以下の構成になっています。

for (初期値;条件式;増減式) {
  繰り返し処理
}

  • 初期値はfor文中で最初に設定される値
  • 条件式は繰り返し処理の継続の是非を決める
  • 増減式は処理が行われるたびに値の増減の更新を行なう
    for(int i = 0; i < 20; i++) { 
    命令a;
    }

     

    上記では命令aが20回処理を行なうように設定されています。

    continue文/break文

    continue文を利用するとfor文やwhile文などの実行している繰り返し処理を飛ばして(別の言い方ではcontinue以降の処理を行わないで)、次の処理を移行することが出来る。

    break文を利用すると、繰り返し処理のループを抜け、処理をストップすることが出来る。{}で囲われたループを1つ抜けることが出来る。

    以下はcontinue文とbreak文の記述例になります。

    int example = 0; //exampleを宣言
    for (int i = 0; i < 200; i++) { //200回繰り返し処理を行なう
    if((i % 2) != 0) continue; // i が奇数の場合、continue以降の処理は行わない
    example += i; //exampleに i の値を加算する
    if(i == 100) break; // i の値が100ならばループを抜け、処理をストップする
    }
    

     

    solidityイベント(Event)処理

    Solidityのイベント処理は条件分岐(if-else文)、繰り返し処理(do-while文やfor文)と同様、Javascriptに類似した形となっています。

    Eventが実行されると、与えられた関数のパラメーターはブロックチェーン上のトランザクションのログに記録されます。そしてイベントはコントラクトのアドレスと関連づけられる。

    また、イベントのログはブロックチェーンで管理されるため、基本的に存在し続ける。

    コントラクトの作成者であっても、コントラクトからイベントとログに直接的にアクセスすることは出来ません。

    event TestEvent(address addss, uint value);//TestEventというイベントを宣言 
    TestEvent(addss, value);//Eventの実行