Ámbito y bloques
Parte de la sección Fundamentals del Journey de Lua de Coddy — lección 86 de 90.
En Lua, puedes crear nuevos ámbitos en cualquier parte de tu código utilizando bloques do...end. Estos bloques te permiten controlar exactamente dónde se puede acceder a tus variables locales, dándote un control preciso sobre el ámbito de las variables.
Aquí tienes cómo puedes crear un nuevo ámbito con un bloque do...end:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Esto funciona
print(innerVar) -- Esto también funciona
end
print(outerVar) -- Esto funciona
print(innerVar) -- ¡Esto causaría un error!El aspecto poderoso del alcance es que puedes tener variables locales con el mismo nombre en diferentes bloques, y estas permanecen completamente separadas:
local name = "Alice"
do
local name = "Bob" -- ¡Variable diferente!
print(name) -- Imprime "Bob"
end
print(name) -- Imprime "Alice"Cada bloque do...end crea su propio entorno aislado para variables locales. Las variables declaradas dentro de un bloque no pueden escapar al ámbito externo, mientras que las variables de los ámbitos externos pueden ser accedidas desde dentro de los bloques internos.
Desafío
FácilCrea bloques do...end anidados para demostrar cómo las variables locales con el mismo nombre permanecen completamente separadas en diferentes alcances.
Primero, crea una variable local llamada playerLevel con el valor 10 en el alcance externo e imprímela.
Luego crea un bloque do...end y dentro de él:
- Declara una nueva variable local también llamada
playerLevelcon el valor25 - Imprime esta
playerLevelinterna
Después de que termine el bloque interno, imprime la playerLevel externa de nuevo para mostrar que permaneció sin cambios.
Esto demuestra que las variables locales con nombres idénticos en diferentes alcances son completamente independientes: la variable interna no afecta a la externa.
Hoja de referencia
Crea nuevos ámbitos en cualquier parte de tu código utilizando bloques do...end para controlar el alcance de las variables:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Esto funciona
print(innerVar) -- Esto también funciona
end
print(outerVar) -- Esto funciona
print(innerVar) -- ¡Esto causaría un error!Las variables locales con el mismo nombre en diferentes bloques permanecen completamente separadas:
local name = "Alice"
do
local name = "Bob" -- ¡Variable diferente!
print(name) -- Imprime "Bob"
end
print(name) -- Imprime "Alice"Las variables declaradas dentro de un bloque no pueden escapar al ámbito externo, mientras que las variables de los ámbitos externos pueden ser accedidas desde dentro de los bloques internos.
Pruébalo tú mismo
-- TODO: Escribe tu código aquíEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentals
4Operadores 2 Relacionales y Lógicos
Operadores de IgualdadOperadores RelacionalesEl Operador 'and'El Operador 'or'El Operador 'not'Evaluación de CortocircuitoValores Truthy y FalsyResumen - Lógica Simple7Lógica condicional básica
La sentencia if-thenLa sentencia if-then-elseLa sentencia elseifResumen - Cofre del tesoro10Tablas Parte 1: Estilo de lista
¿Qué es una tabla?Crear una tablaAcceder a elementos por índiceModificar elementos por índiceEl operador de longitud '#'table.insert()table.remove()Resumen - Gestionar miembros del grupo13Proyecto: Tienda de pociones sencilla
Configuración del proyectoAñadir una poción2Variables y tipos de datos
¿Qué es una variable?NúmerosStringsBooleanosEl valor 'nil'La función type()Convenciones de nomenclaturaResumen - Perfil de personaje5Salida básica
Imprimir literalesImprimir variablesImprimir múltiples valoresCombinar cadenas y variablesLa función tostring()EntradaConversión de tipos (Cast)Resumen - Informe de estadoResumen - Hasta 1208Fundamentos de manipulación de strings
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Repaso - Formatear nombre de usuario11Tablas 2: Estilo Diccionario
Pares Clave-ValorCreación de Tablas Estilo DiccionarioAcceso - Notación de CorchetesAcceso con Notación de PuntoAñadir y Modificar ParesEliminar Pares con nilResumen - Propiedades de Elementos14Ámbito de las variables
Variables globalesVariables locales¿Por qué usar variables locales?Ámbito y bloquesRepaso - El acertijo del ámbito3Operadores 1: Aritmética y Concatenación
Operadores aritméticosOperador de móduloOperador de exponenciaciónConcatenación de stringsPrecedencia de operadoresResumen: Cálculos sencillos6Proyecto: Mostrar estadísticas del personaje
Mensaje de bienvenidaDeclarar estadísticas del personaje9Fundamentos de las funciones
Declarar una funciónLlamar a una funciónFunciones con parámetrosFunciones con múltiples parámetrosLa sentencia 'return'Repaso - Calculadora de área