実務型コーディング演習 / 約15分
バグ修正①: オフバイワンエラー
なぜこれを学ぶか
「1つズレる」バグは初心者から上級者まで誰もが踏むバグの代表格です。配列の添字・ループ回数の境界を正確に把握する訓練をしましょう。
オフバイワン(Off-by-one)エラー とは、ループや配列アクセスで「1だけズレる」バグの総称です。例えば for (let i = 0; i <= arr.length; i++) は最後に arr[arr.length](= undefined)にアクセスしてしまいます。
配列のインデックスは 0始まり です。長さ3の配列の最後の要素は arr[2](= arr[arr.length - 1])。arr[3] は範囲外で undefined になります。
ループ条件は < arr.length が安全です。<= arr.length は1回多く回ります。「最後の要素まで処理する」には i < arr.length、「最後の要素を除く」には i < arr.length - 1 です。
デバッグの手順: ①ループ変数 i の値をコンソールに出力して確認 ②境界(最初・最後)だけを手動で追う ③テストケースに「空配列」「1要素」「境界値」を必ず含める。
重要ポイント
- 配列インデックスは0始まり。長さNの配列の最後は
arr[N-1] - ループは
i < arr.length(<=は1回多い) - テストには空配列・1要素・境界値を必ず含める
理解度チェック
選ぶと即座に解説が表示されます。
`for (let i = 0; i <= arr.length; i++)` のバグはどれ?
ヒントを見る
`arr.length` が3のとき、i は 0, 1, 2, 3 と変化します。`arr[3]` は何でしょうか?
コーディング演習実際に書く
以下の `sumArray` 関数にはオフバイワンエラーがあります。バグを見つけて修正し、配列の全要素の合計を正しく返す関数を完成させてください。
function sumArray(arr)
スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?