Solidityでは、他のプログラミング言語同様に、if
文、for
文などの制御構造(フローを制御するための構文や文法のこと)を使うことがあります。条件に基づいて特定の処理を実行する、といった使い方ができます。
C言語のようにif
, else
, while
, do
, for
, break
, continue
, return
などを使うことができます。
条件分岐
if
文やelse if
文、else
文を使用して、条件に基づいて異なるブロックのコードを実行します。
次の例では、isOddNumber
(奇数であるかをチェックする)関数の中で、入力値が奇数か偶数かを判定しています。number % 2
はnumber
を2で割ったときのあまり、という意味の数式です。if
に続く条件は、余りが0である、という意味で、余りが0の場合に次の文が実行されます。else
に続く文は、この条件に当てはまらない場合に実行されます。
function isOddNumber(uint256 number) public view returns (bool) {
bool isOdd = false;
if (number % 2 == 0) {
isOdd = false;
} else {
isOdd = true;
}
return isOdd;
}
ループ
for
ループやwhile
ループを使用して、特定の条件を満たす間、あるいは特定の回数繰り返し処理を行います。
次の例のsumUp
関数は、0〜9までの合計値を求めるプログラムです。i
が0から10未満までの間、i
を順番に増やしていき、sum
に足し合わせていく、ということをしています。
uint256 i = 0
:i
に0を代入し、まずは0から始めるi < 10
:i
が10未満の間i++
:for
文以下を実行後、i
に1を加えて、繰り返す(2の条件を満たさなくなるまで)
function sumUp() public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < 10; i++) {
sum += i;
}
return sum;
}
次の例は、day11の例からの引用です。この中で、withdraw
関数の中でfor
文が使われています。i
が0からs_funders.length
(s_funders配列の要素数)未満の間、for
の中の3行(5行目〜7行目)を順番に実行します。
...
function withdraw() public onlyOwner {
uint256 total = 0;
for (uint256 i = 0; i < s_funders.length; i++) {
address funder = s_funders[i];
total += s_addressToAmount[funder];
s_addressToAmount[funder] = 0;
}
...
制御フローの転送
break
文やcontinue
文を使用して、ループ内での処理の中断や次の繰り返しステップへのジャンプを制御します。
次の例では、for
文の中で、特定の条件の場合に、break
, continue
が呼ばれています。i
が3の場合は、ループを抜けて、処理が中断され、i
が5の場合は、次の繰り返し(i
= 6)にスキップされます。
for (uint i = 0; i < n; i++) {
if (i == 3) {
break; // ループを中断する
}
if (i == 5) {
continue; // 次の繰り返しステップへジャンプする
}
// iが5でない場合に、この行以降にあるコードは実行される(3の場合は、そもそもループを抜けてしまう)
}
ご意見をお聞かせください!
この記事、または、web3チュートリアル全体について、是非、あなたのご意見をお聞かせください。
アンケートはこちらからご回答いただけます。
無料相談承ります
オンラインでの無料相談を承っています。ご希望の方は、お問い合わせフォームよりご連絡ください。
ITの専門家があなたのご質問にお答えいたします。
Comments