.NET Chronicles

Temas relacionados con el desarrollo de aplicaciones con .NET

Octavio Telis

La abolición de las Variables Globales en Visual Basic

Hola ¿Qué tal?


Estos son tiempos de .NET, tiempos de libertad, es el tiempo en el que por fin hemos visto un visual basic pleno y más poderoso de lo que era antes, recuerdo el Visual Basic 6, el 5 y el anterior VB4 en el cual me inicié en esta venerable profesión.


En aquellas versiones de Visual Basic, los módulos eran un recurso muy útil, una manera de centralizar las funciones o los procedimientos que queríamos poner a disposición de toda nuestra aplicación, ahora es a ha cambiado, sin embargo dentro de lo que existía en las versiones anteriores a .NET, y que fue de mucha utilidad, solo las variables globales, que era la manera típica de mantener estado y tener información disponible en variables que eran accesibles desde cualquier formulario en nuestros proyectos, se utilizaban para el uso de “banderas” (como son llamadas por algunos) que servían para mantener el estado, otra utilidad era almacenar valores que provenían de cálculos o resultados para tenerlos a la mano en cualquier formulario para cuando se requiriera, esto era común, no era malo, y además, se prefería sobre el uso de propiedades por la manera en que se concentraban en un solo lugar. Bien, pues eso fue en el pasado, ahora las variables globales ya no existen (bueno… cómo de que no?), está bien, ya no debería mantenerse esa práctica, y es que no podemos permitirnos prácticas arcaicas cuando lo que tenemos en frente es lo último en tecnología, es un lenguaje nuevo y aunque hay cosas que funcionan de las versiones anteriores, en este lenguaje el modo de programar es totalmente distinto, Visual Basic .NET ha implicado en estos primeros cinco años de vida un cambio de conducta, de pensamiento y de, obviamente, programación. Muchos han tomado Visual Basic .NET como una continuación de Visual Basic 6,  porque funciona y no es con afán de criticar a nadie, solo es la situación que se ve en este mundo del desarrollo. El desarrollo en VB.NET es nuevo y fresco y dentro de sus capacidades está la de no requerir variables globales para funcionar, dado que ahora tiene medios de propagación mucho más eficientes y todavía mejores, más seguros y efectivos y más control.


Si escribo esto es porque cuando pasé de Visual Basic 6 a VB.NET era casi imposible no sucumbir a las antiguas prácticas, sin embargo, con explorar un poco más en las características del lenguaje y con los retos de cambiar por algo que fuera acorde a lo que tenía enfrente me di cuenta de que el uso de las variables globales se volvía prácticamente innecesario, totalmente, ya que poco a poco podía pasar la información entre formularios con mejores y refinadas técnicas de programación orientada a objetos, y utilizando todo lo que nos brinda la nueva especificación del lenguaje.


Consideremos un módulo en Visual Basic .NET, este módulo al compilarse se transforma en una clase estática con miembros estáticos, si utilizamos variables Public dentro del módulo para hacer uso de variable globales lo que estamos creando es una clase con campos “shared” que estarán siempre en memoria y que no serán limpiados de la memoria mientras dure la ejecución de la aplicación, parece no ser tan malo, sin embargo, cuando se empiezan a utilizar campos de tipos de referencia, la memoria se empieza a cargar y conforme se utilicen seguirá ocupando espacio y en ocasiones ya muy extremas hasta puede causar problemas al momento de dibujar los controles de de los formularios por falta de memoria. Bien, un segundo punto al margen, es que el modificador Shared no está pensado para utilizarlo en campos sino en métodos, ya que un método como tal no guardará la referencia de elementos de su interior y estarán disponibles para ser recolectados por el recolector de basura, cosa que no pasa con los campos, y es que al ejecutarse un método shared todo en su interior estará limitado por el ámbito que se crea en el bloque de dicho método, por lo que al terminar la ejecución lo que se utilizó en el interior perderá el ámbito y estará listo para ser descargado de la memoria.


Bueno, ¿y qué hago entonces para sustituir mis variables globales?, la respuesta es simple; se tienen varios mecanismos que nos servirán para propagar un valor a través de clases y formularios, y más que con el  .NET Framework , los formularios ya no se crean y están disponibles al momento de ejecutar la aplicación, como se sucedía en VB 6 y anteriores, ahora, hay que declarar explícitamente el formulario en una variable para poder mostrarlo y aunque pudiera pensarse que las variables globales toman sentido, pues no, ya que si se requiere ocupar un valor que se tiene almacenado al momento de crear el formulario para realizar tareas en el interior de este, pues se le puede pasar de dos posibles maneras.


La primera sería utilizando un constructor dentro de la clase del formulario que vamos a llamar y de esta manera construirlo con el valor que se desea utilizar al momento de crear la instancia, ya del lado del formulario, podemos ocupar una variable para almacenarlo y trabajar con él.


La otra posibilidad es el uso de propiedades en el formulario que se va a llamar, donde inmediatamente después de crear la instancia podremos pasar el valor por medio de la propiedad. El uso del constructor en lo personal me es más útil, ya que obligo a la instancia a pasar el valor que se requiere dentro del formulario  sin dejar lugar a errores en la ejecución.


Otra manera de comunicar valores entre formularios y clases es con el uso de eventos, en un post anterior explico de manera práctica como utilizar un evento para comunicar información de una clase a otra.


Así pues, verán que no hay ya necesidad de tener una variable global para disponer de valores en la aplicación, con el uso de constructores, propiedades y eventos, es posible comunicar valores en el marco sin el riesgo de cargar la memoria y además con un estilo más orientado a .NET. Con lo que las variables globales han sido abolidas.


Pues bien, espero que haga sentido y que les sea de utilidad.


Saludos…


Octavio Telis

7 Responses to La abolición de las Variables Globales en Visual Basic

Leave a Reply

Your email address will not be published. Required fields are marked *


*

.NET Chronicles
  • Eventos del Teclado en WPF July 22, 2015
      Hola ¿qué tal? En esta ocasión como como continuidad a lo que previamente había escrito sobre los eventos del teclado en Windows Forms, haré un artículo sobre el uso de los eventos del teclado en WPF, así es en Windows Presentation Foundation. No es desconocido por muchos que el nuevo estándar de desarrollo de […]
  • Programación Orientada a Objetos (Introducción) May 14, 2014
    Hola qué tal… Aquí les dejo este video sobre la programación orientada a objetos, a manera de preámbulo a los siguientes videos, con las bases de la programación en C# y otra línea con algunas utilerías. Saludos… Octavio Telis
  • Capítulo piloto del la versión en video de .NET Chronicles May 6, 2014
    Hola qué tal??? Pues en esta ocasión estoy compartiendo con ustedes la liga de un video piloto, con el que pretendo comunicar un poco más sobre las tecnologías .NET y los lenguajes de Programación. En esta ocasión será con la presentación de C#, en un capitulo titulado “Te presento a C#”, espero que sea de […]
  • Validación de datos de entrada con enlace a datos en WPF May 27, 2012
    Tweet Hola, qué tal. Ya que he venido hablando del enlace a datos en WPF en las publicaciones anteriores, bien convendría considerar el uso del Binding para validar datos, hemos tocado ya algunos puntos necesarios para escribir esta funcionalidad. En las publicaciones anteriores vimos ya como enlazar los datos, además, cómo convertir los datos, ahora, […]
  • Uso de la propiedad Visibility con valores booleanos en WPF May 25, 2012
    Tweet    Hola que tal. En esta ocasión quiero compartir con ustedes una manera para utilizar la propiedad Visibility con un valor bool. Te preguntarás “¿Y qué sentido tiene eso?”, bien, el detalles está en que en ocasiones se requiere que la visibilidad de un control de la interfaz de usuario responda a un valor […]
  • Conversión de Valores con Enlace a Datos May 24, 2012
    Tweet     Hola que tal. En el diseño de aplicaciones con WPF tendremos muchas ventajas en cuanto a la interfaz de usuario se refiere, dado que es un modelo muy flexible, nos permite dar formato y estilo a la apariencia de la interfaz de usuario, logrando aplicaciones más agradables, vistosas y que mejoran por mucho […]
  • Mostrar archivos de imagen en WPF utilizando enlace a datos. May 23, 2012
    Tweet Holal Qué tal. Continuando con el ejemplo del post anterior (http://bit.ly/oh0m9k), referente al manejo de imágenes en WPF, ejemplificaremos el manejo de las imágenes de la misma manera pero, esta vez, utilizando enlace a datos y la clase Binding. Antes, tenemos que hablar un poco de lo que es el enlace a datos con […]
  • Mostrar archivos de imagen en WPF August 26, 2011
    Hola Qué Tal… En esta ocasión quiero comenzar una serie de artículos sobre el manejo de archivos de imágenes con .NET. En esta primera parte voy a tratar la manera de cargar un archivo de imagen en un contenedor de imagen, en este caso usaré WPF y el control Image que viene incluido en el […]
  • Comparar dos DataTables según sus DataRows August 23, 2011
    Hola que tal. En ocasiones es necesario comparar el contenido de dos DataTable para determinar qué registros (DataRow) están en una y en otra no. Supongamos tenemos dos DataTable; dt1 y dt2, ambas con el mismo esquema. La tabla dt2 contiene más registros que la taba dt1, por lo que deseamos saber qué registros de […]
  • Arquitectura – Definición de un Data Access Component (con un ejemplo) Parte 3 May 14, 2010
    Hola Qué Tal? En esta ocasión, no he dejado pasar tanto tiempo para terminar la trilogía del uso de Data Access Component con un ejemplo. Bien, pues en este artículo veremos el uso del componente ya creado, cómo extenderemos la funcionalidad del componente y cómo lo aplicamos en la interfaz de usuario. Primeramente, debemos crear […]