なぜ一般的なエラーがそれほど一般的であり、それらを防ぐために何ができるのでしょうか?


20

オフバイワンエラーは、最も一般的ではないにしても、最も一般的なプログラミングエラーの1つであるようです(/software/109/what-are-common-mistakes-in-codingを参照してください)、および従来の知恵)。

これらが非常に一般的である理由は何ですか、それは人間の脳がどのように機能するかと関係がありますか?
1つのエラーで餌食にならないようにするにはどうすればよいですか?


8
彼らは一般的ですか?私はかなりの数のバグを作成していますが、それらの中でオフバイワンのエラーが発生することはほとんどありません。おそらく私はほとんどPythonを使用している、つまり、インデックスをジャグリングする代わりにイテレータを使用しているからでしょうか?(そして:それは私たちに何を伝えますか?;))

考える必要が少なくなればなるほど、生産性は上がりますか?
マルフィスト

@delnan:同意します。通常、オフバイワンエラーは、コーディング中に最初に検出されます(公式の「テストフェーズ」に移行する前です)。
FrustratedWithFormsDesigner

7
私はほとんど...誤って前の質問に答え
DevSolo

> 1つのエラーで餌食にならないようにするにはどうすればよいですか?イテレータを使用します
ジムG.

回答:


18

それは、人間の脳がどのように機能するかに関係しています。通常、エンジニアリンググレードの精度を必要としないタスクには「十分」であるように配線されています。対処が最も困難なケースが「エッジ」ケースと呼ばれる理由があります。

おそらく、1つずつのエラーを回避する最良の方法はカプセル化です。たとえば、コレクションをインデックス(0からcount-1)で反復するforループを使用する代わりに、列挙子に組み込まれた停止のすべてのロジックでfor-eachスタイルループを使用します。そうすれば、コレクションをループするたびにではなく、列挙子を作成するときに一度だけ境界を取得するだけで済みます。


6
カプセル化の場合は+1。私が今まで見た最悪のオフバイワンのバグは、プログラムの一部が1ベースであり、一部が0ベースであり、それが使用されるすべての機能がある場合、あなたはそれがどれであったか、あなたがする必要があるかどうかを覚えておく必要がある変換を行うかどうか、そしてどの方向に進むか。数ヶ月前、カプセル化が不十分だと、誰かが2つの別々の調合場所で1以外のエラーを犯したため、2以外の難しいエラーを追跡する必要がありました。至るところにコンバージョンを達成することは不可能であり、1つの方法で1 つのコンバージョンに変換することができました。
カールビーレフェルト

2
誰かがもっと情報を持っているなら、この科学についてもっと知りたいです。すべてが...エッジであるところのプログラムによるスタイリングは、CSSのような、イライラするので、なぜ私はまた、これだと思う
会社レーザー

7

脳がボーダーとエッジをどのように処理するかについて特別なことがあります。

脳が範囲空間の観点から考えるのは簡単ですが、エッジに焦点を合わせるには、もう少し注意が必要なようです。ここにそれがどのように起こるか、注意の一時的な喪失または不十分な集中があり、あなたは国境を逃しました。

問題へのもう1 つのわずかな追加は、異なるプログラミング環境では、0または1から始まる異なるインデックスシステムがあり、両方のタイプの環境に積極的にさらされている人々を混乱させる可能性があることです。


4

コンテキストの切り替えによるものだと思います。私たちの日常生活では、1ベースのインデックスを使用する傾向があります。このため、脳は正しい行動を長期記憶に焼き付けることができません。


2
そして、DOインデックスが1から始まるプログラミング言語(PL / SQLなど)を切り替える楽しみがあります。
FrustratedWithFormsDesigner

3
そのために+1。1インデックス付きの番号付けは、「いくつあるか?」という質問に答えます。これは、ほとんどの現実世界のタスクにきちんと対応しています。0-indexedは、「各アイテムがどの位置にあるのか」に関するもので、ミートスペースではあまり役に立ちません。
ダン・レイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.