Devo sostituire le eccezioni JavaScript native con un concetto estraneo?

0

Ho un caso in cui vorrei evitare di utilizzare le eccezioni per gli errori di convalida nel parametro di callback della mia funzione. Questi errori non sono davvero eccezionali e try...catch può impedire a un motore JS di ottimizzare l'intera funzione (che fa importa in tutti i progetti con cui lavoro). Il callback è pensato per essere implementato dai miei utenti della biblioteca. Mi sembra che l'unico modo corretto per gestirlo sia

  • restituire un oggetto come {type: 'error', value: '...some error description...'} e {type: 'success', value: 123} ...
  • ... o allo stesso modo, ma sviluppato ulteriormente: crea un tipo di dati algebrico Result = Ok(value) | Err(error) e restituisce la sua istanza.

Quest'ultimo approccio è molto pulito e conveniente, porta a un codice migliore rispetto alle eccezioni e consente molti metodi utili (ad esempio la funzione map che trasforma Ok e ignora Err , rileva automaticamente un'eccezione e la converte in Err , ecc.). Questo approccio è ampiamente utilizzato in Haskell e Ruggine .

Il problema è che non ho mai visto questo approccio utilizzato nel codice di produzione JavaScript, quindi non sarà familiare alla maggior parte degli sviluppatori che lavorano con i miei progetti. Inoltre, l'introduzione di un modo così pratico di lavorare con errori mi motiva a usarlo su tutto il codice base, sostituendo con esso le eccezioni native ed esponendo i valori di Result nelle interfacce pubbliche. Altrimenti la gestione degli errori diventa incoerente.

Quindi, è una buona idea usare un concetto che sostituisce la gestione delle eccezioni native? Ci sono aspetti negativi? Probabilmente non è male (abbiamo sostituito i callback con le promesse molto prima che diventassero uno standard), ma non sono sicuro.

    
posta interphx 11.10.2016 - 20:08
fonte

0 risposte

Leggi altre domande sui tag