Lua Academy · Lección

Sentencias if, elseif y else

Escriba lógica de ramificación condicional con la sintaxis if/elseif/else de Lua.

Lección 1 de 412 pasos

Sentencias if, elseif y else es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

Instrucción if básica

La instrucción if evalúa una condición y ejecuta su bloque cuando la condición es verdadera. En Lua, solo false y nil son falsos; todo lo demás, incluidos 0 y "", es verdadero. Finalice el bloque con end.

local score = 85

if score >= 90 then
  print("A grade")
end

if score >= 60 then
  print("Passing")   -- prints
end

if 0 then
  print("0 is truthy!")  -- prints in Lua
end

if/elseif/else

Encadene varias condiciones con elseif y proporcione una alternativa con else. Lua evalúa las condiciones de arriba abajo y ejecuta únicamente la primera rama que coincide. A diferencia de switch/case en otros lenguajes, elseif es una sola palabra clave en Lua, no else if.

local score = 75

if score >= 90 then
  print("A")
elseif score >= 80 then
  print("B")
elseif score >= 70 then
  print("C")   -- prints
elseif score >= 60 then
  print("D")
else
  print("F")
end

Operadores lógicos en condiciones

Lua utiliza and, or y not como operadores lógicos. Aplican evaluación en cortocircuito: and devuelve el primer valor falso o el último valor; or devuelve el primer valor verdadero o el último valor. Esto permite patrones idiomáticos de valores predeterminados.

local age = 25
local hasID = true

if age >= 18 and hasID then
  print("Entry allowed")
end

-- or for defaults
local name = nil
local display = name or "Guest"
print(display)   -- Guest

Modismo ternario con and/or

Lua no tiene un operador ternario, pero el patrón and/or lo aproxima: condition and trueVal or falseVal. Funciona siempre que trueVal no sea false ni nil. Para una lógica ternaria más segura, utilice una función if en línea.

local x = 10
local label = (x > 5) and "big" or "small"
print(label)   -- big

-- Safe ternary function
local function ternary(cond, t, f)
  if cond then return t else return f end
end
print(ternary(false, "yes", "no"))  -- no

Instrucciones if anidadas

Puede anidar instrucciones if dentro de otras ramas. Cada bloque anidado requiere su propio end. Un anidamiento profundo suele indicar que convendría utilizar retornos anticipados o cláusulas de guarda para aplanar la lógica.

local loggedIn = true
local isAdmin = false

if loggedIn then
  if isAdmin then
    print("Admin dashboard")
  else
    print("User dashboard")  -- prints
  end
else
  print("Login required")
end

Cláusulas de guarda

Una cláusula de guarda es un retorno anticipado que gestiona los casos no válidos o límite al principio de una función, reduciendo el anidamiento. Este patrón mantiene el código del «caso habitual» sin sangría adicional y facilita su lectura.

local function processAge(age)
  if type(age) ~= "number" then
    return nil, "age must be a number"
  end
  if age < 0 then
    return nil, "age cannot be negative"
  end
  -- happy path
  return math.floor(age)
end

print(processAge(25.7))   -- 25
print(processAge(-1))     -- nil  age cannot be negative

Comparación de valores

Operadores de comparación de Lua: == (igual), ~= (distinto), <, >, <=, >=. Nota: ~= es el operador «distinto» de Lua, no !=. Las comparaciones de cadenas utilizan el orden lexicográfico. No puede comparar directamente cadenas con números.

print(1 == 1)      -- true
print(1 ~= 2)      -- true
print("abc" < "abd")  -- true (lexicographic)
print("10" == 10)  -- false (different types)

-- Safe nil check
local val = nil
if val == nil then
  print("no value")
end

Igualdad de cadenas

Dos cadenas son iguales en Lua si y solo si tienen el mismo contenido y la misma longitud en bytes. Lua interna las cadenas, por lo que las cadenas iguales suelen apuntar a la misma posición de memoria, lo que permite que == sea una comparación rápida de punteros. Nunca compare cadenas con is ni mediante igualdad de referencias; == siempre compara por valor.

local s1 = "hello"
local s2 = "hel" .. "lo"

print(s1 == s2)     -- true (same content)
print(s1 == "Hello") -- false (case sensitive)

-- Check for empty string
local name = ""
if name == "" or name == nil then
  print("name is empty or nil")
end

Comparación de tablas y funciones

Las tablas y las funciones se comparan por referencia, no por contenido. Dos literales de tabla diferentes con contenido idéntico no son iguales, a menos que sean el mismo objeto. Utilice metamétodos como __eq para definir una igualdad personalizada para las tablas.

local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1

print(t1 == t2)   -- false (different objects)
print(t1 == t3)   -- true (same reference)

local f1 = function() end
local f2 = function() end
print(f1 == f2)   -- false

Patrones idiomáticos

Modismos habituales de Lua con condicionales: utilice assert() para validar las precondiciones, utilice el truco de and/or para valores predeterminados breves y evite las dobles negaciones (not not x) para convertir cualquier valor en booleano.

-- assert pattern
local function sqrt(n)
  assert(n >= 0, "sqrt of negative")
  return math.sqrt(n)
end

-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal)   -- true

-- Default parameter
local function greet(name)
  name = name or "World"
  print("Hello, " .. name)
end
greet()          -- Hello, World

Comprobación rápida

¿Qué valores son falsos en Lua?

Recapitulación: condicionales

Resumen:

  • if ... elseif ... else ... end: la forma completa de ramificación
  • Solo nil y false son falsos
  • and/or aplican evaluación en cortocircuito y devuelven los valores de los operandos
  • ~= significa «distinto» en Lua (no !=)
  • Las tablas y las funciones se comparan por referencia; las cadenas, por valor
  • Utilice cláusulas de guarda para reducir el anidamiento
Gratis para empezar

Aprende Lua con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
40
Lecciones
159

Preguntas frecuentes

¿La lección «Sentencias if, elseif y else» es gratis?

Sí — el texto completo de «Sentencias if, elseif y else» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Sentencias if, elseif y else»?

Escriba lógica de ramificación condicional con la sintaxis if/elseif/else de Lua. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Sentencias if, elseif y else»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Sentencias if, elseif y else
  2. Bucles while y repeat-until
  3. Bucle for numérico
  4. for genérico y break
← Volver a Lua Academy