Usar 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 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 = 鈥淲e 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!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *