【Solidity】第2章第6回:breakとcontinueの使い方

本記事では、Solidityにおけるループ処理を効率的に制御するためのbreak
文とcontinue
文の基本構造や応用方法について解説します。これらを活用することで、スマートコントラクトのパフォーマンスを向上させることが可能です。
0. 記事の概要
この記事を読むメリット
- break文とcontinue文の基本を理解:ループ処理を途中で終了したり、特定の条件でスキップしたりする方法を学べます。
- ループ効率の向上:無駄な処理を削減し、効率的なコードを書くスキルが向上します。
- エラー防止:ループの制御を適切に行うことで、意図しない挙動を防ぐ方法が分かります。
この記事で学べること
- break文とcontinue文の基本構文と使い方
- スマートコントラクトへの応用例
- 制御構文に関連するよくあるエラーとその解決策
1. break文の基本構造

1.1 break文とは?
break
文は、現在のループ処理を即座に終了し、ループの外側に処理を移すための構文です。以下が基本構文です:
// break文の基本構文
for (初期化; 条件; 更新) {
if (条件式) {
break; // ループを終了
}
// 繰り返し処理の内容
}
1.2 コード例
// 配列内の最初の偶数を見つける例
function findFirstEven(uint256[] memory numbers) public pure returns (uint256) {
for (uint256 i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 == 0) {
return numbers[i]; // 最初の偶数を返す
}
}
revert("偶数が見つかりませんでした");
}
動作解説
このコードでは、配列numbers
内の最初の偶数を見つけた時点でbreak
文を使用し、ループを終了します。
2. continue文の基本構造

2.1 continue文とは?
continue
文は、ループの現在の反復をスキップし、次の反復に移るための構文です。以下が基本構文です:
// continue文の基本構文
for (初期化; 条件; 更新) {
if (条件式) {
continue; // 次の反復に移る
}
// 繰り返し処理の内容
}
2.2 コード例
// 配列内の奇数だけを合計する例
function sumOddNumbers(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 == 0) {
continue; // 偶数をスキップ
}
sum += numbers[i];
}
return sum;
}
動作解説
このコードでは、continue
文を使用して偶数をスキップし、奇数のみを合計しています。
3. よくあるエラーとその解決策

3.1 不適切なbreak文の使用
break
文を多用すると、ループの構造が複雑になり、意図しない動作を引き起こす可能性があります。
// 悪い例: 過剰なbreak文の使用
function processNumbers(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length; i++) {
if (numbers[i] > 100) {
break; // 条件を満たしたら終了
}
sum += numbers[i];
}
return sum;
}
// 改善例: 条件式でループを適切に制御
function processNumbersImproved(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length && numbers[i] <= 100; i++) {
sum += numbers[i];
}
return sum;
}
対処法
ループの条件式を工夫することで、break
文の使用を最小限に抑えられます。
3.2 continue文の誤用
continue
文を多用すると、ループ内の処理が読みにくくなる場合があります。
// 悪い例: 過剰なcontinue文の使用
function sumPositiveNumbers(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length; i++) {
if (numbers[i] < 0) {
continue; // 負の数をスキップ
}
sum += numbers[i];
}
return sum;
}
// 改善例: 条件式を明確化
function sumPositiveNumbersImproved(uint256[] memory numbers) public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 0; i < numbers.length; i++) {
if (numbers[i] >= 0) {
sum += numbers[i];
}
}
return sum;
}
対処法
条件式を明確にすることで、continue
文の使用を減らし、コードの可読性を向上させましょう。
4. 練習問題
以下の課題に挑戦してみましょう:
- 配列内の要素を検索し、特定の値が見つかった場合に終了する関数を作成してください。
- 配列内の偶数をスキップし、奇数の合計を返す関数を作成してください。
5. まとめ
本記事では、Solidityにおけるbreak
文とcontinue
文の基本的な使い方や注意点について学びました。これらの構文を正しく活用することで、効率的なループ処理を実現できます。次回は、ネストされた制御構文の記述について詳しく解説します。