Che tipo di eccezione dovrei gettare?
Ho una classe di console che descrive il rettangolo di celle che un utente può indicizzare passando in una coordinata:
width, height = 80, 25
console = Console.new(width, height)
x, y = 2, 5
point_on_screen = Point.new(x, y)
console[point_on_screen] = 'a'
Ora mi sto chiedendo quali tipi di eccezione generare quando un indice si verifica fuori limite. Cioè, al di fuori dei domini (costante!) X: [0, larghezza] e y: [0, altezza]. Potrei lanciare un RangeError
o un ArgumentError
* .
- Importa il tipo di eccezione da lanciare finché il messaggio di errore è utile?
- Devo usare lo stesso tipo di eccezione sia per la costruzione della console che per l'indicizzazione? I due sono veramente semanticamente diversi?
* restituire un tipo di oggetto fuori dai limiti è probabilmente un'opzione migliore - qualcosa come un modello di oggetto nullo - ma non è quello che mi sto chiedendo qui.
ArgumentError
Un'opzione è lanciare un ArgumentError
perché l'argomento è ovviamente sbagliato, le dimensioni non possono mai essere non negative. Questo è ciò che lancio nell'esempio 1, perché dovremmo sapere in anticipo che le dimensioni devono essere non negative.
Esempio 1:
console = Console new(-3, 4) # Argument error
RangeError
Un'altra opzione è lanciare un RangeError
perché l'argomento è fuori dall'intervallo valido. Li uso per l'indicizzazione. L'argomento è sempre fuori intervallo se x < 0, ma se x ≥ 0 dipende dalla larghezza della console se x è nel dominio.
Esempio 2:
console = Console.new(20, 40)
pt = Point.new(-3, 4)
Console[pt] # RangeError