一人前エンジニア道場

実務型コーディング演習 / 約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)

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?