Gestione degli errori nelle funzioni della libreria matematica

0

Durante la scrittura di una funzione di libreria, come

double getAvg(double[]);

come si dovrebbe gestire l'array vuoto?

(Nota che, matematicamente parlando, la media di un set vuoto non è definita).

    
posta 1v0 21.07.2015 - 16:44
fonte

1 risposta

2

Qualunque cosa tu faccia, documentala. Se gli utenti non apprezzano il comportamento predefinito che fornisci, possono adattare la tua funzione alle loro esigenze.

Ecco un paio di possibilità, ordinate dal meglio al meno preferito (secondo me).

  • In questi casi non c'è un valore ragionevole, quindi dobbiamo restituire l' assenza di un valore. Questo potrebbe essere un double* o double? con un puntatore nullo o un tipo Maybe Double o un oggetto Optional<double> , a seconda della lingua. Queste tecniche hanno il vantaggio di eliminare l'assenza di un valore nel sistema di tipi, in modo da poter applicare all'utente la condizione di errore.

  • Si tratta di un errore logico, quindi è necessario generare un'eccezione o utilizzare qualsiasi meccanismo idiomatico nella propria lingua per specificare un errore. Per esempio. in Go, restituiresti più argomenti con uno che è un codice di errore, mentre potresti impostare errno in C. Se gli utenti preferiscono avere un determinato valore predefinito, possono quindi rilevare l'eccezione.

  • I numeri in virgola mobile hanno un valore predefinito valido che potrebbe essere restituito in questi casi. Se agli utenti non piace il valore predefinito, possono verificare esplicitamente l'input che induce gli errori e fornire il proprio comportamento di errore.

    • il valore predefinito dovrebbe essere 0 , poiché questo è generalmente il valore predefinito per i numeri.
    • l'impostazione predefinita dovrebbe essere NaN (= 0/0) per segnalare l'assenza di un valore. Se la lingua supporta le operazioni in virgola mobile IEEE, questo "avvelena" rapidamente tutti i calcoli utilizzando quel valore. Notare che NaN è un valore di ritorno valido se uno degli input era anche NaN.
risposta data 21.07.2015 - 17:09
fonte

Leggi altre domande sui tag