Digamos que el argumento de value puede ser una string o null
function doSomething1(value) { if (value) { // do something } throw new Error("No value provided"); } function doSomething2(value) { if (!value) { throw new Error("No value provided"); } // do something } En ese caso, quiero verificar el value y arrojar un error si es nulo.
Pregunta: ¿Existe alguna diferencia técnica en términos de rendimiento o uso de memoria entre las funciones doSomething1 y doSomething2 teniendo en cuenta que // do something puede ser pequeña o enorme? ¿El orden de lanzamiento de la excepción influirá en el rendimiento en cualquier nivel o se trata de casos de uso 100% idénticos?
No hay absolutamente ninguna diferencia en términos de tiempo de ejecución:
En ambos casos, si el value es null , tiene una verificación booleana y un lanzamiento de error; de lo contrario, tiene una verificación y la ejecución del bloque // do something .
La diferencia es puramente estilo de código. Personalmente, prefiero el segundo, ya que reduce el nivel de sangría en uno en // do something , y pone el manejo de errores en un solo lugar (mientras que en el primero, tiene el control al comienzo del método y el lanzamiento en el final).