
Guillermo Ruiz Alvarado
Pregunta¿Cuando es recomendable usar variables globales?

Darío Rugerio
Dentro de una clase no les veo uso, generan todos los inconvenientes mencionados.
Para un proyecto en general, tal vez solo para variables de entorno Ejemplo: definir el entorno de desarrollo, si es local o producción

Mauro Chojrin
No me gustaría decir "nunca" pero me cuesta bastante imaginar un caso real en el que no haya otra opción mejor... Las variables globales son la principal causa de efectos colaterales y de que los programas se "salgan de control".

Jesus Hernandez
Un ejemplo relacionado a lo que comenté en mi anterior respuesta, que no puedo editar. Por ejemplo, recuerdo un caso que leí, hablo de memoria por lo que me podía equivocar, donde en uno de estos lenguajes sin variables globales como tal pero con diccionario de proceso, me parece un caso de uso era en un framework web para guardar un token desde antes de que se ejecutaba el código del usuario del framework hasta después cuando renderizaba, que antes que complicarlo el como pasarlo por parámetro desde puntos alejados y con llamadas en medio que dependían del usuario del framework, en definitiva por simplificar se usaba ese diccionario de proceso (no recuerdo todos los detalles como hace tiempo y no tengo link a mano, entonces es lo que me acuerdo) pero que aun así eso era limitado a ese proceso, tampoco era global a todo ni compartido con todo. Y seguramente fue por que todas las demás opciones o no servían o añadían excesiva complejidad innecesarios realmente y teniendo un caso concreto, bien delimitado y entendiendo como afecta, etc. Pero sin duda lo global no debería ser la norma sino la excepción. Incluso cuando necesitas una variable dure toda la ejecución, visibilidad y vida no tienen por qué ser iguales siempre y por ejemplo hay lenguajes donde sí una variable dentro de una función o método es estática, esta mantiene el valor entre llamadas a esa función por lo que no necesita estar como global en cuanto a desde donde se ve y puede usar pero tener un tiempo de vida de lo que dure la ejecución. Así mantienes su ámbito de uso local pero sin perder su contenido entre ejecuciones para no tener que recurrir a que sea global cuando sólo quiere ese tiempo de vida pero no necesita ser usada más que en ese contexto local.

Jesus Hernandez
Cuando no quede otro remedio o las demás soluciones sean un peor remedio que la enfermedad. O alguna constante como pueda ser el valor de pi. Y en general, cuando no haya soluciones mejores, si se llega a usar variables globales, considerar si necesitarán mutex, etc; para evitar sorpresas si hay concurrencia. Hay opciones como inyección de dependencias, pasar por parámetro, que en muchos casos van a ser más claros que tener algo global, sobre todo si luego se usa en más ocasiones con valores diferentes en eso que pones global y acabas justamente pasándolo por parámetro para poder pasar los valores diferentes. Digamos que una variable global, en cierto modo, es como si esta en el main, va a durar lo que dure la ejecución, y la pasas por parámetro, con la diferencia que esa estaría limitada a donde se pasa y donde se usa en ese contexto, mientras que la global no tiene esa restricción, con lo que acabas usándola desde cualquier sitio dificultando el mantenimiento. Algunos lenguajes no tienen variables globales, y todo funciona, tienen a lo mucho un diccionario de proceso, que sería lo más cercano a una variable global y aún así es solo global al proceso pero no comparte nada entre procesos, comunicándolos por paso de mensajes. Por lo que al final la variable global debería ser la excepción y justificada en lugar de la regla general por no querer ver donde va mejor y tirar del comodin de global. Y los motivos, los que han explicado, cuando más local esté algo más fácil es que haya menos efectos colaterales, problemas de acceso a algo compartido, dependencia por compartir memoria de cosas que podrían funcionar con independencia, etc.
También puede sea de interés esto: https://es.stackoverflow.com/questions/29177/por-qu%C3%A9-es-considerado-una-mala-pr%C3%A1ctica-utilizar-variables-globales

Moisés Cedeño
Cuando necesitas usar una variable en todo el cuerpo de tu aplicación.
No se me viene a la mente un buen uso para una variable global. Es más, las buenas prácticas recomiendan el evitar en lo posible el uso de variables globales:
En este vídeo tratan acerca de las variables globales y constantes.

Cristian Florez
No uses variables globales.