Sto scrivendo un codice che ho disaccoppiato in un modulo a parte, e anche se sono probabilmente l'unica persona che lo userà, sto cercando di pensare come se potessi non essere . Le funzioni in questo modulo eseguono operazioni sugli oggetti di un array che è passato e, al momento, sto facendo un sacco di controlli di sicurezza per evitare le eccezioni causate dall'ottenere dati errati - in particolare, tenendo conto della possibilità di un valore non definito / nullo per quella matrice, o uno degli oggetti nella matrice, o una delle proprietà su uno degli oggetti. In altre parole, un bel po 'di controllo. Tuttavia, nell'applicazione in cui viene utilizzato questo modulo, ho già controllato tutte queste cose prima di inviare i dati da elaborare da questo modulo, perché i valori nulli in questi dati causeranno problemi anche altrove.
Ora che tutto funziona senza intoppi, sono tentato di rimuovere alcuni dei controlli di sicurezza nel mio modulo per motivi di efficienza, dal momento che sto duplicando il lavoro. Tuttavia, se questo modulo fosse usato da qualcun altro, penserei che sarebbe meglio renderlo il più antiproiettile possibile - quindi se i dati cattivi vengono trasmessi dalla loro fine, il mio modulo sarà in grado di gestirlo senza essere responsabile per eventuali arresti anomali. Ma poi ho pensato che una persona ipotetica che utilizzava il mio modulo potesse trovarsi nella stessa posizione in cui mi trovo - certi che i dati che stanno trasmettendo siano buoni, perché lo hanno già controllato.
Per me, la soluzione ovvia è di avere due versioni di alcune funzioni chiave nel modulo: una versione "attenta" se non ti fidi dei dati, e una versione "pericolosa" se ti fidi di essa, e solo voglio massimizzare le prestazioni. È qualcosa che è fatto? Supponendo una buona documentazione, sarebbe una buona idea? E se fosse una buona idea, sarebbe meglio distinguere tra i due in base alla funzione, ad es. processSafely(data)
e liveDangerously(data)
) - o tramite spazi dei nomi separati all'interno del modulo - myModule.safe.process(data)
e myModule.reckless.process(data)
?
EDIT: le risposte finora sono state preziose, ma ho pensato di dover aggiungere (senza virare troppo nel territorio di Overflow dello stack) che il modulo specifico di cui sto parlando è progettato per accettare una (potenzialmente grande) schiera di blog articoli come oggetti (come verrebbero da un parser di un formato abbastanza standard), estraggono tag da detti articoli e li contano, e restituiscono un array contenente ogni singolo tag con il suo conteggio. In altre parole, come con tutte le attività che implicano l'analisi di file / oggetti presumibilmente conformi a un determinato formato, c'è un sacco di cose che possono andare storte, ma io (o l'utente) probabilmente dovrò render conto per quello altrove comunque (es. prima di rendere gli articoli ad una vista o qualsiasi altra cosa). Inoltre, tutti gli assegni di cui sto parlando sono O (n) - non solo una o due istruzioni preliminari if o le coercizioni di tipo.