Uso de variables globales en Node.js

​Hola chicos, en el artículo de hoy quiero hablar sobre las variables globales en Node. Este artículo está dirigido a desarrolladores que tienen un nivel de habilidad de principiante a intermedio...

Hola chicos, en el artículo de hoy quiero hablar sobre las variables globales en Node. Este artículo está dirigido a desarrolladores que tienen un nivel de habilidad de principiante a intermedio que trabajan con Node. Si nunca ha oído hablar de las variables globales ni ha trabajado con ellas, no se preocupe. Este artículo lo pondrá en funcionamiento rápidamente con todo lo que necesita saber sobre las variables globales.

¿Qué son las variables globales?

Las variables globales son muy similares, si no idénticas, a las variables regulares. Las variables globales se pueden inicializar con un valor, ese valor se puede cambiar e incluso se pueden borrar como una variable regular. La diferencia entre una variable regular y una variable global se reduce a su alcance. Cuando crea una variable en un archivo JavaScript, esa variable solo existe en el ámbito en el que se declaró. Ahora, ¿qué quiero decir con esto? En el código a continuación, puede ver un ejemplo de dos variables diferentes con diferentes alcances.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";

En el fragmento de código anterior, podemos ver que hay dos variables, fileScope y localScope. La variable fileScope se puede cambiar o llamar desde cualquier lugar dentro de este archivo, mientras que la variable localScope solo existe dentro de la función doSomething(). Estoy seguro de que en este punto te estarás preguntando qué tiene que ver esto con las variables globales. Cuando hablamos de variables globales, existen para todos los archivos de un programa, lo que significa que tienen un alcance global para el programa.

La razón por la que esto es posible es porque los programas de JavaScript comparten un espacio de nombres global entre todos los archivos del programa. Para decirlo de otra manera, imagina que tu programa es un archivo o contenedor gigante que ha "importado" todos los demás archivos JavaScript. Luego declara una variable en este archivo contenedor grande, esa variable ahora tiene alcance en todo el programa. Si no está seguro de qué es un espacio de nombres o desea obtener más información sobre ellos, consulte [Este artículo] (https://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Scoping_with_Namespaces) para obtener más información.

Cómo declarar y usar una variable global

Ahora que comprendemos mejor qué es una variable global en Node, hablemos sobre cómo configuramos y usamos realmente una variable global. Para configurar una variable global, necesitamos crearla en el objeto global. El objeto global es lo que nos da el alcance de todo el proyecto, en lugar de solo el archivo (módulo) en el que se creó la variable. En el bloque de código a continuación, creamos una variable global llamada globalString y le damos un valor. A continuación, cambiamos el valor de globalString y finalmente lo configuramos como indefinido.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// Global.js

global.globalString = "This can be accessed anywhere!";
console.log(globalString); // Output: "This can be accessed anywhere!"

globalString = "Check me out now";
console.log(globalString); // Output: "Check me out now"

globalString = undefined;
console.log(globalString); // Output: undefined
1
2
3
4
5
6
7
8
// Example.js
 
// We can use the global we created in Global.js in this file 
// as well.
console.log(globalString); // Output: undefined
 
globalString = We can change it too!"; 
console.log(globalString); // Output: "We can change it too!"

De lo que no he hablado todavía es de otra forma en la que puedes hacer que una variable sea global. La razón por la que excluí esto es porque no es una forma adecuada de configurar una variable. Si declara una variable en un archivo sin usar la palabra clave var y luego le asigna un valor, el objeto global establecerá una propiedad para esta variable. Este proceso esencialmente lo convierte en una variable accesible globalmente. Sin embargo, recomiendo enfáticamente no usar este método, ya que no es la forma correcta de crear globales. También es importante tener en cuenta que si configura la directiva 'use strict', Node deshabilitará los globales implícitos y probablemente terminará con un error en tiempo de ejecución en lugar de un script que funcione.

Casos de uso práctico para variables globales

Ahora, es posible que esté pensando para sí mismo que desea salir y crear variables globales ahora que sabe más sobre ellas. Voy a advertir fuertemente contra la creación de variables globales por algunas razones muy importantes.

La primera razón es que cuando crea una variable global, existe durante la vida útil de la aplicación. Cuando una variable persiste durante el tiempo de vida de la aplicación, significa que está allí, en la memoria, ocupando recursos mientras la aplicación se ejecuta.

En segundo lugar, el uso tradicional de variables globales puede causar problemas de simultaneidad. Si varios subprocesos pueden acceder a la misma variable y no hay modificadores de acceso o dispositivos de seguridad, puede generar algunos problemas graves de dos subprocesos que intentan acceder y utilizar la misma variable. Sin embargo, si bien este es el caso en otros lenguajes, no es necesariamente el caso de Node.js, ya que es estrictamente un entorno de subproceso único. Si bien es posible agrupar los procesos de Node, no existe una forma nativa de comunicarse entre ellos.

La última razón por la que voy a hablar es que el uso de globales puede causar un acoplamiento implícito entre archivos o variables. El acoplamiento no es algo bueno cuando se trata de escribir un gran código. Al escribir código, queremos asegurarnos de que sea lo más modular y reutilizable posible, al mismo tiempo que nos aseguramos de que sea fácil de usar y comprender. Juntar partes de su código puede generar algunos dolores de cabeza importantes en el futuro cuando intenta depurar por qué algo no funciona.

Si quieres saber más sobre por qué no se recomiendan las variables globales, puedes consultar este gran artículo llamado Las variables globales son malas.

Si se siente confundido en cuanto al propósito de las variables globales, no tema. Vamos a echar un vistazo a algunas de las variables globales que están integradas en Node e intentaremos comprender mejor por qué son globales y cómo se usan. De hecho, ¡probablemente ya haya usado algunos de ellos sin siquiera darse cuenta de que son objetos globales!

1
2
3
4
5
6
7
8
9
// Node Globals

console.log("Hello World!");

process.env.PORT = 3000;

setInterval({
  console.log("2 seconds passed.");
}, 2000);

Si echas un vistazo al bloque de código anterior, probablemente verás al menos una instancia que hayas usado antes, console.log(). Según la documentación de Node, el objeto de la consola es global y tiene algunos métodos que permiten a los desarrolladores hacer cosas como imprimir un registro o un error. Profundizando en los documentos, podemos ver que console es realmente una instancia global que está configurada para escribir en process.stdout y process.stderr.

Esto nos lleva a la siguiente declaración que ve en el bloque de código anterior, el objeto proceso. Si ha creado una compilación de producción de una aplicación Node, es probable que haya tenido que configurar el puerto para la variable de entorno. La variable de entorno env es una parte del objeto proceso que es otro global. Puede acceder a las variables en el objeto proceso en cualquier archivo de su proyecto porque es global. Si este objeto no fuera global, el objeto consola tampoco sería accesible desde ningún archivo, recuerda que en realidad es un objeto que hace referencia al objeto proceso.

setInterval es otra función que quizás haya visto antes si alguna vez tuvo motivos para retrasar una operación antes de ejecutarla. setTimeout y setImmediate son de naturaleza similar a setInterval y también son funciones globales. Estas tres funciones son parte del módulo del temporizador que expone una API global que le permite llamar a estas funciones sin requerir el temporizador en sus archivos explícitamente.

Todos los casos de uso mencionados anteriormente están integrados en Node y son globales por una razón. El objeto proceso es global porque proporciona información sobre el proceso de Nodo en ejecución actual y, por lo tanto, debería estar disponible desde cualquier archivo sin necesidad de solicitarlo. Lo mismo puede decirse del módulo del temporizador que contiene una serie de funciones que son importantes y deben estar accesibles en cualquier lugar sin necesidad de solicitarlo. Si desea obtener más información sobre los objetos globales existentes integrados en Node, lo animo a visitar la [documentación oficial sobre Globals] (https://nodejs.org/api/globals.html).

Más información {#más información}

¿Quiere aprender más sobre los fundamentos de Node.js? Personalmente, recomendaría un curso en línea, como Aprender Node.js de Wes Bos ya que los videos son mucho más fáciles de seguir y usted De hecho, llegaré a construir una aplicación del mundo real.

Conclusión

Sé que fue bastante información, así que gracias por dejarla. Toda la información anterior se encuentra en la documentación del sitio web del nodo. Por favor, siéntase libre de hacer preguntas y dar comentarios en la sección de comentarios a continuación. ¡Hasta la próxima chicos!