【Solidity】第2章第5回:while文とその注意点

本記事では、Solidityにおける繰り返し処理で使用されるwhile文について、その基本構造や使い方、注意点を詳しく解説します。無限ループを防ぐ方法や、安全なコーディングテクニックも紹介します。
0. 記事の概要
この記事を読むメリット
- while文の基本構造を理解:特定の条件で繰り返し処理を実行する方法を学べます。
- 安全なコーディングテクニック:無限ループを回避し、安全なコードを記述できます。
- 効率的なスマートコントラクトの構築:繰り返し処理を活用して効率化を図ることができます。
この記事で学べること
- while文の基本構文と使い方
- Solidityにおけるwhile文の活用例
- よくあるエラーとその解決策
1. while文の基本構文

1.1 while文とは?
while文は、条件がtrue
である間、同じ処理を繰り返し実行するための構文です。以下が基本構文です:
// while文の基本構文
while (条件式) {
// 繰り返し処理の内容
}
1.2 コード例
// 例: 配列の要素を合計する
function calculateSum(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
uint256 i = 0;
while (i < numbers.length) {
sum += numbers[i];
i++;
}
return sum;
}
動作解説
このコードでは、配列numbers
の各要素を順番に合計し、結果を返します。while
文は、i
が配列の長さに達するまで繰り返し処理を実行します。
2. while文の活用例

2.1 条件付きの繰り返し処理
while文は、条件が変化するまで特定の処理を繰り返す場合に便利です。以下は、数値が特定の値に達するまで繰り返し処理を行う例です。
// 例: 指定した数値に達するまで加算
function incrementUntil(uint256 start, uint256 target) public pure returns (uint256) {
while (start < target) {
start++;
}
return start;
}
動作解説
このコードでは、start
がtarget
に達するまで1ずつ加算し、最終的な値を返します。
2.2 無限ループを防ぐ工夫
while文は誤った記述によって無限ループを引き起こす可能性があるため、終了条件を正しく設定する必要があります。
// 無限ループを防ぐ例
function safeWhileLoop(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
uint256 i = 0;
while (i < numbers.length) {
sum += numbers[i];
i++;
require(i < 100, "ループの制限を超えました"); // 安全対策
}
return sum;
}
動作解説
このコードでは、require
関数を使用してループ回数に制限を設け、無限ループを防ぎます。
3. よくあるエラーとその解決策

3.1 終了条件の設定ミス
終了条件が正しく設定されていない場合、無限ループが発生します。
// 悪い例: 終了条件が適切でない
uint256 i = 0;
while (i >= 0) {
i++; // 無限ループが発生
}
// 改善例: 適切な終了条件を設定
uint256 i = 0;
while (i < 10) {
i++;
}
対処法
終了条件を適切に設定し、無限ループを防ぎましょう。
3.2 高いガスコスト
while文は繰り返し処理を行うため、ガスコストが高くなる可能性があります。
// 改善例: ガスコストを削減する工夫
function optimizedSum(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
return sum;
}
対処法
場合によってはfor
文を使用することで、より効率的に処理を行うことができます。
4. 練習問題
以下の課題に挑戦してみましょう:
- 配列内の要素を条件に基づいて合計する関数をwhile文を使って作成してください。
- 特定の条件が満たされるまで値を増やす処理を記述してください。
5. まとめ
本記事では、Solidityにおけるwhile文の基本構造と活用例、注意点について学びました。while文を正しく使用することで、柔軟な繰り返し処理が可能になります。次回は、break文とcontinue文の使い方について詳しく解説します。