A medida que nuestros programas crecen, con funciones que llaman a otras funciones y con variables por todas partes, surge una pregunta fundamental: si creo una variable dentro de una función, ¿puedo usarla fuera de ella? La respuesta es no, y la razón se encuentra en uno de los conceptos más importantes de la programación: el ámbito o scope.
Entender el ámbito es clave para evitar una categoría de errores muy común y para escribir código limpio y predecible.
¿Qué es un bloque de código? 🧱
Antes de hablar de ámbito, necesitamos definir su contenedor: el bloque de código. Un bloque es, simplemente, un grupo de una o más sentencias que se tratan como una unidad. En pseudocódigo y en muchos lenguajes, los bloques se delimitan visualmente o con palabras clave.
Son bloques de código:
- El interior de una estructura condicional (
Si... FinSi). - El cuerpo de un bucle (
Para... FinPara,Mientras... FinMientras). - El cuerpo de una función (
Funcion... FinFuncion). - El algoritmo principal en sí (
Proceso... FinProceso). 
Un bloque define una «zona» o un «contexto» dentro de nuestro programa.
El ámbito de una variable: su «habitación» en el programa 🏠
El ámbito (o scope en inglés) de una variable define la región del programa en la que esa variable existe y es accesible.
La mejor analogía es pensar en un programa como una casa:
- Hay habitaciones (las funciones, los bucles…).
 - Hay pasillos y zonas comunes (el algoritmo principal).
 
Una variable declarada dentro de una habitación solo existe y puede ser usada dentro de esa habitación. Alguien en la cocina no puede usar la televisión que está en el salón. De la misma manera, el código fuera de una función no puede «ver» las variables que se crearon dentro de ella.
Variables locales vs. variables globales 🌍
Esta distinción nos lleva a los dos tipos principales de ámbito:
Variables locales
Una variable local es aquella que se declara dentro de un bloque de código (como una función). Su ámbito está restringido a ese bloque. Nace cuando el programa entra en el bloque y «muere» (su memoria se libera) cuando el programa sale de él.
¿Y los parámetros? Los parámetros de una función son un tipo especial de variable local. Reciben su valor inicial desde la llamada a la función, pero, por lo demás, se comportan como cualquier otra variable local: solo existen y son accesibles dentro del cuerpo de esa función.
Funcion Sumar(num1, num2)  // num1 y num2 son variables locales
    resultado = num1 + num2  // resultado también es una variable local
    Devolver resultado
FinFuncion
Proceso Principal
    // La variable 'resultado' de la función NO existe aquí.
    // Daría un error si intentamos usarla: Escribir resultado
    
    valor_suma = Sumar(5, 3) // Aquí solo recibimos el valor devuelto
    Escribir valor_suma
FinProceso
Casi todas las variables que uses deberían ser locales. Esto hace que el código sea más seguro y fácil de entender, ya que los efectos de una función están controlados y no modifican inesperadamente partes lejanas del programa.
Variables globales
Una variable global es aquella que se declara fuera de todos los bloques, normalmente al principio del algoritmo. Su ámbito es el programa entero. Puede ser leída y modificada desde cualquier parte del código, incluyendo cualquier función.
Proceso ContadorGlobal
    Definir contador Como Entero // 'contador' es una variable global
    contador = 0
    // Llamamos a la función, que modificará la variable global
    IncrementarContador()
    IncrementarContador()
    Escribir "El contador vale: ", contador // Mostrará 2
FinProceso
Funcion IncrementarContador()
    // Esta función no tiene parámetros, accede directamente a la global
    contador = contador + 1
FinFuncion
Aunque parezcan útiles, las variables globales deben usarse con muchísima precaución. Como pueden ser modificadas desde cualquier sitio, es muy difícil seguirles la pista y pueden provocar errores muy difíciles de depurar («efectos secundarios»).
Importante: por la razón anterior, no todos los lenguajes permiten este tipo de variables o las construyen de la misma forma.
Conclusión
Entender el ámbito es fundamental para estructurar correctamente nuestros programas. La regla de oro es:
- Un bloque de código define un ámbito.
 - Las variables declaradas dentro de un bloque son locales a ese bloque.
 - Los parámetros de una función son variables locales.
 - Las variables globales son accesibles desde todas partes, pero deben evitarse en la medida de lo posible, siempre y cuando el lenguaje te permita utilizarlas.
 
Con este conocimiento, ya puedes escribir funciones y programas mucho más robustos y organizados.


Deja una respuesta