7 recomendaciones para mejorar la confiabilidad del código JavaScript

El autor del artículo, cuya traducción publicamos hoy, decidió compartir con los lectores siete recomendaciones sobre JavaScript. Estas recomendaciones, como el autor quisiera esperar, ayudarán a escribir programas más confiables.



1. Use las funciones de fábrica


Si alguien no lo sabe, una función de fábrica es una función ordinaria (no una clase o un constructor) que devuelve objetos. Este concepto simple nos permite aprovechar las potentes funciones de JavaScript para crear aplicaciones potentes y confiables.

Es importante saber que se llama a una función de fábrica sin usar una palabra clave new. Si la llamas con esta palabra clave, dejará de comportarse como debería.

▍ ¿Por qué usar funciones de fábrica?


Las funciones de fábrica se pueden usar para simplificar la creación de instancias de un objeto sin tener que enlazar a clases o la palabra clave new.

La esencia de las funciones de fábrica es que se consideran las funciones más comunes. Esto significa que pueden usarse para construir objetos, otras funciones e incluso promesas. Es decir, tales funciones se pueden combinar y combinar para crear funciones de fábrica más potentes, que, a su vez, también se pueden combinar con otras funciones u objetos para crear funciones de fábrica aún más avanzadas. Las funciones de fábrica abren posibilidades ilimitadas para el programador.

Dado lo anterior y combinando el uso de funciones de fábrica con los enfoques recomendados para escribir código, estas funciones pueden convertirse en herramientas potentes y convenientes.

Aquí hay un ejemplo simple de una función de fábrica:

function createFrog(name) {
  const children = []
  
  return {
    addChild(frog) {
      children.push(frog)
    },
  }
}

const mikeTheFrog = createFrog('mike')

Si usa las funciones de fábrica durante algún tiempo, puede llegar a comprender que, en comparación con sus competidores en forma de funciones de constructor, las funciones de fábrica pueden aumentar el nivel de reutilización del código. Como resultado, el programador tiene que escribir menos código. Las funciones de fábrica facilitan la refactorización, ya que pueden devolver objetos arbitrarios y simplifican el trabajo en la base del código.

2. Al escribir funciones de constructor, agregue métodos a sus prototipos


Si acaba de comenzar a aprender JavaScript, trabajar con un prototipo puede parecerle algo nuevo. Entonces, al principio, fue conmigo.

Tenga en cuenta que esta técnica no es adecuada para las clases. Las clases, sin esfuerzo adicional por parte del programador, guardan independientemente los métodos en sus prototipos.

Aquí hay una función constructora de ejemplo:

function Frog(name, gender) {
  this.name = name
  this.gender = gender
}

Frog.prototype.leap = function(feet) {
  console.log(`Leaping ${feet}ft into the air`)
}

¿Por qué usar una construcción en Frog.prototype.leaplugar de simplemente escribir un método leapen un objeto creado por el constructor? Por ejemplo, así:

function Frog(name, gender) {
  this.name = name
  this.gender = gender
  
  this.leap = function(feet) {
    console.log(`Leaping ${feet}ft into the air`)
  }
}

El hecho es que si un método se adjunta directamente a una propiedad del constructor prototype, esto significa que esta instancia será compartida por todas las instancias del objeto creado por el constructor.

En otras palabras, si confía en el ejemplo anterior, que se utiliza this.leap, resulta que al crear varias instancias del objeto Frog, cada una de ellas tendrá su propio método leap. Es decir, se crearán varias copias de este método. En este caso, esto indica el uso irracional de los recursos del sistema, ya que en todos estos objetos habrá una copia del mismo método que se comportará igual en todas partes. No es necesario crear copias de dicho método en cada instancia del objeto.

Como resultado, esto conducirá a una disminución en el rendimiento del programa. Pero esto no es difícil de evitar. Cabe señalar que las propiedades this.namey this.genderdeben declararse de esta forma, ya que deben pertenecer a un objeto específico. Si dibujamos una analogía con ranas reales, cuya representación virtual se describe utilizando el constructor Frog, resulta que las ranas pueden tener sus propios nombres, las ranas tienen un género diferente. Como resultado, para almacenar información única sobre las ranas en cada uno de los objetos, tiene sentido declarar las propiedades de los objetos para que se usen exactamente al nivel de las instancias de los objetos.

Aquí hay un ejemplo del uso de esta técnica en el paquete de solicitud popular .

3. Agregue la propiedad .type a los objetos a distinguir.


Una propiedad .typeque, por acuerdo no oficial, a menudo se agrega a los objetos, ha encontrado un uso extremadamente extendido en estos días. Si está escribiendo aplicaciones React, es posible que haya encontrado esta propiedad todo el tiempo. Especialmente si usas Redux .

El uso de este enfoque se muestra muy bien en el proceso de desarrollo, ya que, entre otras cosas, le permite crear código autodocumentado:

function createSpecies(type, name, gender) {
  if (type === 'frog') {
    return createFrog(name, gender)
  } else if (type === 'human') {
    return createHuman(name, gender)
  } else if (type == undefined) {
    throw new Error('Cannot create a species with an unknown type')
  }
}

const myNewFrog = createSpecies('frog', 'sally', 'female')

4. Use TypeScript


TypeScript se ha generalizado en la comunidad JavaScript debido al hecho de que este lenguaje le brinda al programador una herramienta poderosa para trabajar con seguridad con los tipos, y también le permite identificar errores incluso antes de que aparezcan en el código en ejecución.

El uso de TypeScript le permite encontrar posibles errores en la etapa de compilación del código, incluso antes de que se inicie el código. Si algo está mal en el código, se mostrará una notificación de compilación cuando se compila.

Pero la seguridad de tipos y la detección temprana de errores está lejos de ser una lista completa de razones para usar TypeScript en cualquier situación. Una de las mejores cosas de TypeScript es que le permite aprovechar las nuevas funciones de JavaScript incluso antes de que aparezcan en los principales navegadores. El hecho es que el código TypeScript se compila en código JavaScript compatible con los navegadores modernos y no con los más recientes.

5. Escribir pruebas


Si está trabajando en un proyecto y se toma en serio este trabajo, prácticamente necesita escribir pruebas. Esto hará que el código sea más predecible, lo hará menos propenso a errores. Esto le dará un mayor nivel de confianza en la calidad del código al realizar cambios en él. En otras palabras, si desea que su código resista la prueba del tiempo, no hay mejor manera de preparar su código para esta prueba que escribiendo pruebas. Cuantas más pruebas tenga en su proyecto, más confianza tendrá en el código cuando lo implemente en producción.

Si fuera necesario señalar solo una, la característica más importante y positiva de las pruebas, ¿cuál sería? Creo que este es el hecho de que las pruebas ayudan a encontrar errores antes de que entren en un programa de trabajo. ¿A qué tipo de programador no le gustaría tener esa oportunidad? Ciertamente no rechazaría tal cosa. Es por eso que estoy escribiendo pruebas unitarias para mis proyectos.

Si solo va a comenzar a crear pruebas para su proyecto, tenga en cuenta que hoy en día existen muchas herramientas y marcos para organizar las pruebas de código. Aquí hay algunas cosas buenas al respecto.

6. Escriba funciones tan simples como sea posible.


Como todos sabemos, JavaScript sin problemas le permite crear funciones enormes que resuelven muchas tareas a la vez.

Si eres nuevo en la programación, entonces esto puede parecerte positivo. Diré sobre mí mismo que en los viejos tiempos me sentí muy bien cuando escribí grandes piezas de código que hicieron lo que necesitaba. Me importaba principalmente a mí. Me sentí más seguro cuando vi que mi código funcionaba sin problemas, sin mencionar el hecho de que mi autoestima se vio reforzada por el hecho de que pude escribir un gran bloque de código que funciona bien. ¡Qué ingenuo era entonces!

Si desea escribir código que sea fácil de mantener, código simple y no demasiado propenso a errores, entonces su mejor opción es hacer que sus funciones sean lo más simples y pequeñas posible. Cuanto más simple es la función, más fácil es probarla aisladamente de otras partes del sistema.

Esto es especialmente importante para aquellos que desean utilizar los principios de la programación funcional en su trabajo. A este respecto, podemos recordar un requisito bien conocido para las funciones: una función debe resolver un solo problema y debe resolverlo muy bien.

7. Recuerde siempre la importancia del manejo de errores al usar JSON.parse y JSON.stringify


En la programación de JavaScript, al pasar datos JSON a un método JSON.parse, es necesario tener en cuenta el hecho de que este método espera recibir, como primer argumento, un código JSON ejecutado correctamente. Si este método recibe materiales JSON con los que algo está mal, arrojará un error.

El peligro aquí es que pasar un JSON.parsecódigo JSON incorrecto hace que la aplicación se detenga. En el trabajo, recientemente encontré una situación en la que uno de nuestros proyectos web arrojó errores debido al hecho de que uno de los paquetes externos no encajaba JSON.parseen el bloque try/catch. Esto terminó en una falla de la página, y no pudimos deshacernos del problema hasta que se reparó el código del paquete externo. Todo esto sucedió debido al hecho de que en el código, durante su operación, apareció un error no procesado:

SyntaxError: Unexpected token } in JSON at position 107

Al procesar datos JSON que ingresan a la aplicación desde fuentes externas, uno no puede esperar que tengan el formato correcto. Siempre debe estar preparado para el hecho de que pueden encontrar algo que causará un error.

Resumen


Esperamos que las recomendaciones dadas aquí para mejorar la confiabilidad del código JavaScript le sean útiles.

¡Queridos lectores! ¿Qué recomendaría a quienes desean escribir un código JavaScript mejor y más confiable?

Source: https://habr.com/ru/post/undefined/


All Articles