This is the first time I'm writing a library (for me to use on several games) so I think for good programming practice I should comment my code throughly, adding XML summary and use exception handling when user of this library done something wrong like in many .NET classes (the user will likely be me or my teammates)
This is the constructor for NoteRow class (I'm developing music games, by the way) which needs to determine the array's size on creation
bool[] l1NoteData;
public NoteRow(int numberOfNotes)
{
this.l1NoteData = new bool[numberOfNotes];
}
Now I have this method to toggle the booleans on l1NoteData array.
public void toggleNote(uint index)
{
l1NoteData[index] = !l1NoteData[index]
}
So here as defensive programming I'd like to check that the index (that user of this class will specify, which is me or maybe my teammates) is out of range specified when creating this class or not.
I've read MANY throw exception vs. assert vs. return bool etc. and still confused and can't choose. Here is my concern :
toggleNote
and input index exceeding the limit of array so the exception will be thrown. Or I,as a programmer of my games (this library is the part of my game) should put assert there so I'm not make a mistake of calling toggleNote
with over-the-limit index from my game. (that use this library) I can now know the game's code is wrong because assert is fired then fix it and finally made into release build. (and then the assert code will be gone)Sorry for my confusing English because I'm already confused with this problem...
Assert is just for testing. Asserts are not used for error handling in a production application
You should pre-check (if) if the input is coming from the user, errors are expected etc.
If an error is completely unexpected, then that is what exception handling is for.
If your own program is providing the index parameter, then it is a bug if the wrong value is passed. Exceptions are fine for this.
Several good questions have been asked on this