ライブラリを作成するのはこれが初めてなので (複数のゲームで使用するため)、適切なプログラミング プラクティスとして、コードにコメントを付け、XML の概要を追加し、このライブラリのユーザーが何か間違ったことをしたときに例外処理を使用する必要があると思います。多くの .NET クラスで (ユーザーはおそらく私または私のチームメイトです)
これは、作成時に配列のサイズを決定する必要がある NoteRow クラス (ちなみに、私は音楽ゲームを開発しています) のコンストラクターです。
bool[] l1NoteData;
public NoteRow(int numberOfNotes)
{
this.l1NoteData = new bool[numberOfNotes];
}
これで、l1NoteData 配列のブール値を切り替えるこのメソッドができました。
public void toggleNote(uint index)
{
l1NoteData[index] = !l1NoteData[index]
}
したがって、ここで防御的なプログラミングとして、インデックス (このクラスのユーザーが指定する、私またはおそらく私のチームメイト) が、このクラスの作成時に指定された範囲外にあるかどうかを確認したいと思います。
私は多くのスロー例外とアサートとリターンブールなどを読みましたが、まだ混乱していて選択できません。ここに私の懸念があります:
- インデックスが l1NoteData.length を超えているかどうかを確認するために 'if' ステートメントを配置する必要があります。(IndexOutOfRangeException) もしそうなら、スローされた例外の使用は何ですか? 何か問題が発生した場合、とにかくデフォルトの例外が発生しますか?
- Assert はプログラマー向けであることを読みました。プログラマーが想定するようにコードが機能していないことをプログラマーに通知すること。また、(ユーザーが) 異常なテスト ケースを処理するために存在する例外をスローするのと比較して、テスト ケースを挿入してアサートを発生させることはできません (それが発生した場合はコードが間違っています)。これで、このライブラリのユーザーは私になります。では、私はプログラマーまたはユーザーと見なされますか? 私は、このクラスのユーザー
toggleNote
が配列の制限を超えるインデックスを呼び出して入力する可能性があるため、例外がスローされます。または、私は自分のゲームのプログラマー(このライブラリは私のゲームの一部です) として assert をそこに置く必要があるので、呼び出しを間違えないようにします。toggleNote
私のゲームからの限界を超えたインデックスで。(このライブラリを使用します) アサートが発生し、修正して最終的にリリース ビルドになったため、ゲームのコードが間違っていることがわかりました。(そして、アサートコードはなくなります) - 上記の質問から、アサートが実行される原因となるバグがこれ以上ないことを徹底的にテストしたら、ビルドをリリースします。リリース ビルドのコードで assert が使用されないことはわかっていますが、それは本当に良いことですか? プログラムにはまだ多くのバグが残っている可能性があるため、ユーザーがそのバグに遭遇したとき、バグをキャッチするためのアサートはもう存在しません。そのため、代わりに例外を使用できる場合に使用するのは本当に良いことであり、ユーザーがその例外を発生させた場合、開発者として私はそのバグレポートを受け取って修正することができます (ただし、ユーザーは私と私の友人です)
- 成功/失敗を示すために bool を返すよりも、例外をスローする方が 100% 優れていますか? bool を返すのに適していると思われる例は何ですか?
私はすでにこの問題で混乱しているので、混乱した英語で申し訳ありません...