Usar variables globales en Node.js

U

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 en poco tiempo 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, esas variables solo existen en el ámbito en el que se declaró. Ahora, ¿qué quiero decir con esto? En el siguiente código, puede ver un ejemplo de dos variables diferentes con diferentes ámbitos.

// 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 el localScope la variable solo existe dentro de la función doSomething(). Estoy seguro de que en este punto se está 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 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 aprender más.

Cómo declarar y usar una variable global

Ahora que comprendemos mejor qué es una variable global en Node, hablemos de 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.

// 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
// 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 que puede hacer que una variable sea global. La razón por la que he excluido 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 asignarle un valor, el objeto global establecerá una propiedad para esta variable. Este proceso esencialmente lo convierte en una variable accesible globalmente. Sin embargo, recomiendo encarecidamente no utilizar este método, ya que no es la forma correcta de crear globales. También es importante tener en cuenta que si configura el 'use strict' directiva, Node deshabilitará los globales implícitos y probablemente terminará con un error en tiempo de ejecución en lugar de un script de trabajo.

Casos de uso prácticos para variables globales

Ahora, es posible que esté pensando para sí mismo que desea 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 toda la vida útil de la aplicación. Cuando una variable persiste durante la vida útil de la aplicación, significa que está allí, en la memoria, ocupando recursos mientras la aplicación se está ejecutando.

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

La última razón de 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 bueno cuando se trata de escribir un buen 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. Unir partes de su código puede provocar algunos dolores de cabeza importantes en el futuro cuando intente depurar por qué algo no funciona.

Si desea saber más sobre por qué no se recomiendan los globales, puede 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 y tratar de entender mejor por qué son globales y cómo se utilizan. De hecho, probablemente ya haya usado algunos de ellos sin siquiera darse cuenta de que son objetos globales.

// Node Globals

console.log("Hello World!");

process.env.PORT = 3000;

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

Si echa un vistazo al bloque de código anterior, probablemente verá al menos una instancia que haya utilizado antes, console.log(). De acuerdo con 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 process objeto. Si ha creado una compilación de producción de una aplicación de node, es probable que haya tenido que configurar el puerto para la variable de entorno. La variable de entorno env es parte del process objeto que es otro global. Puede acceder a las variables en el process en cualquier archivo de su proyecto porque es global. Si este objeto no era global, el console El objeto tampoco sería accesible desde ningún archivo, recuerde que en realidad es un objeto que hace referencia a la process objeto.

setInterval es otra función que puede haber 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 de temporizador que expone una API global que le permite llamar a estas funciones sin requerir un 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. los process El objeto es global porque proporciona información sobre el proceso de node en ejecución actual y, por lo tanto, debería estar disponible desde cualquier archivo sin tener que solicitarlo. Lo mismo puede decirse del módulo de temporizador que contiene una serie de funciones que son importantes y deberían ser accesibles en cualquier lugar sin tener que requerirlo. Si desea obtener más información sobre los objetos globales existentes integrados en Node, le animo a que visite el documentación oficial sobre Globals.

Aprende más

¿Quiere obtener más información 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 podrás crear una aplicación para el mundo real.

Conclusión

Sé que fue bastante información, así que gracias por insistir. Toda la información anterior se encuentra en la documentación sobre Sitio web de Node. No dude en hacer preguntas y comentarios en la sección de comentarios a continuación. ¡Hasta la próxima, chicos!

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad