domingo, 1 de diciembre de 2013

Buenas tardes queridos lectores, esta viene siendo ya la segunda publicación del mes de diciembre, quiero hablar sobre un tema que me pareció que ya toda la red era consciente, pero no, resulta que ayer vi a un amigo mostrarme un código en el que hacía uso de GLOBAL!!

La idea de esta entrada es explicarles por qué motivo usar variables globales está desaconsejado.

Imagino que a esta altura del partido, muchos se preguntarán, como se me ocurre hacer una entrada para semejante brutalidad, lo que pasa es que no es la primer persona que aún usa global, y prefiero pesarles el link de la entrada que explicarles uno por uno la razón.
Muchos de mis seguidores que leen mis entradas ya sabrán que soy uno de los propulsores del código limpio, el código claro, y el código que cumpla criterios de calidad, ¿Por qué? porque como habrán notado, hacer software de esta manera es un negocio, y prácticamente un estilo de "vida" dentro del mundo de desarrollo.

Usar global es prácticamente una falta de respeto a todo, global existió en un momento del tiempo donde la idea de programación de calidad, y de metodologías de desarrollo, aún no estaba muy madura, global fue diseñado para ser la alternativa fácil para evitar complicarse en pensar un poquito, como resolver correctamente algunas cuestiones del desarrollo.

La idea de global era permitir que una variable se encuentre en un ámbito global, e de ahí el nombre, lo que significa que no se encuentra por ejemplo dentro de una función, sino que puede ser accedida desde afuera y desde dentro de la función.

Pero si analizan un poquito el texto anterior, notarán que si usan global aún no entienden nada, o realmente no aprendieron conceptos muy básicos como variables por referencia o Lvalue (location value) resulta que uno puede manejar una variable de dos formas (esto fue diseñado cuando se pensó en lenguajes de alto nivel), la primer forma de manejar variables es digamos la "más conocida", o la que primero aprendemos, que es usar el valor de una variable, (Rvalue), donde en realidad nosotros trabajamos con el contenido de la misma, la segunda forma de manejar una variable es por su ubicación en memoria (o una referencia a la misma, conocido como Lvalue), donde lo que en realidad estaremos manipulando es la variable en si misma y no su valor. (en realidad manipularemos la referencia a la variable).-

En otras palabras el global puede ser evitado, en cuanto queremos utilizar una variable fuera y dentro de una función, pasándola como parámetro por referencia.

funcion(&$variable);

el echo de usarlo así, nos habilita a que si modificamos la variable dentro de la función, cuando la utilicemos fuera también habrá sido modificada, porque no se crea una variable local que contiene ese valor, sino que se obtiene la referencia y cuando le hacemos una modificación estaremos modificando la variable original.

Ahora el que usa global me preguntará, ¿Y por que no usar global? si cumplen la misma función, ¿Por qué es correcto usar parámetros por referencia y no global?, el tema es muy sencillo, lo primero que dije en mi entrada es que soy propulsor del código limpio y claro, además de que cumpla con criterios de calidad y de maces. Resulta que si nosotros ponemos global por todas partes en una variable, desde un punto en específico, ubicar el origen de la variable sería muy complejo, entonces en el código nosotros tenemos variables que no tenemos idea de donde aparecieron. En cambio nosotros si aparece como parámetro, tenemos la seguridad de que esa variable puede ser ubicada, y fue entregada al momento de ejecutar la función, por lo que automáticamente el código tiene muchísima más lógica que ver un global en la mitad de la función, donde la variable pudo ser creada en otra función que también globalizó la variable, y terminamos haciendo un código horrible.

Pero no es la única razón, si nosotros utilizamos global habilitamos a la variable a estar en muchos otros ámbitos que quizá no se la requiera, y creamos un serio inconveniente de accesos.

Por otra parte el mecanismo con el que se elevan variables hacia el estado de global, a diferencia del mecanismo de pasaje de parámetros, es muy diferente, lo que transforma a las variables globales en variables poco controlables.-

Saludos!

2 comentarios:

  1. Excelente post bro. :D

    Lo tomare muy en cuenta, probablemente alguna vez se me ocurrio hacerlo de esa manera, pero concuerdo con tu ideologia.

    Saludos!

    ResponderEliminar
  2. me alegro bro que te haya gustado la entrada. :)

    ResponderEliminar