Это первый раз, когда я пишу библиотеку (для меня в нескольких играх), поэтому я считаю, что для хорошей практики программирования я должен прокомментировать мой код, добавив обобщение XML и обработчик исключений, когда пользователь этой библиотеки сделал что-то не так, как во многих .NET-классах (пользователь, скорее всего, я или мои товарищи по команде)Путаница о броске и утверждении
Это конструктор класса NoteRow (кстати, я разрабатываю музыкальные игры), который должен определить размер массива по созданию
bool[] l1NoteData;
public NoteRow(int numberOfNotes)
{
this.l1NoteData = new bool[numberOfNotes];
}
Теперь у меня есть этот метод, чтобы переключить булевы на l1NoteData массиве.
public void toggleNote(uint index)
{
l1NoteData[index] = !l1NoteData[index]
}
Так вот как оборонительные программирования я хотел бы проверить, что индекс (что пользователь этого класса будет указывать, что мне или, может быть, мои товарищи по команде) находится вне диапазона, указанного при создании данного класса или нет.
Я прочитал MANY throw exception vs. assert vs. return bool и т. Д. И все еще смущен и не может выбрать. Вот моя забота:
- Должен ли я положить «если» заявление, чтобы проверить, если индекс превышает l1NoteData.length затем огонь исключение, когда он, зная, что исключение будет срабатывать в любом случае, когда эта линия выполнена с «вне диапазона ' индекс? (IndexOutOfRangeException) Если это так, то зачем использовать исключение throwing? Если что-то пойдет не так, в любом случае будет исключение по умолчанию?
- Я читал, что Assert для программиста. Чтобы заметить программиста, что код не работает как программист , предположим,. И никогда нельзя вводить тестовый пример, чтобы сделать заголовок assert (если он запущен, а код неправильный) по сравнению с исключением исключения, которое должно обрабатывать ненормальный тестовый пример (пользователем). Теперь пользователем этой библиотеки будет я. Значит, меня считают программистом или пользователем? I, как пользователь этого класса, может вызывать
toggleNote
и индекс ввода, превышающий предел массива, поэтому исключение будет выбрано. Или я, как программист из моих игр (эта библиотека является частью моей игры) должна поставить там утверждение, поэтому я не ошибаюсь при вызове с чрезмерным индексом из моей игры. (которые используют эту библиотеку) Теперь я могу знать, что код игры неверен, потому что assert уволен, а затем исправить его и, наконец, сделать в сборке релиза. (а затем код подтверждения исчезнет) - Из вышеприведенного вопроса, если я тщательно тестирую, что я уверен, что больше нет ошибки, вызывающей assert для запуска, а затем выйдите для выпуска сборки. Я знаю, что утверждение не будет в коде в выпуске сборки ... но это действительно хорошо? Вероятно, в программе осталось больше ошибок, поэтому теперь, когда пользователь испытывает эту ошибку, утверждение не существует, чтобы поймать ошибку. Так что утверждать, действительно хорошая вещь, чтобы использовать, когда я могу использовать исключение, а если пользователь вызывает это исключение для пожара, я как разработчик могу получить этот отчет об ошибке, чтобы исправить его и т. Д. (Но пользователь - это я и мои друзья)
- Исключение броска на 100% лучше, чем возвращение bool для указания успеха/неудачи? В каком примере вы можете думать, что это более подходит для возвращения bool?
Извините за мой запутанным английский язык, потому что я уже спутать с этой проблемой ...