Sombreado de variables en `if`
Parte de la sección Fundamentos del Journey de GO de Coddy. Lección 37 de 109.
Aprendamos sobre el sombreado de variables en las instrucciones if. Una instrucción if puede declarar una variable antes de su condición, y esa variable solo existe dentro del bloque if y de sus bloques else relacionados. Si tiene el mismo nombre que una variable fuera de if, oculta la variable externa dentro de esos bloques.
Primero, creemos una variable fuera de nuestra instrucción condicional:
x := 10
fmt.Println("Original x value:", x)Después de ejecutar este código, tendremos una variable x con el valor 10 que podremos usar en todo nuestro programa.
Ahora, declaremos una nueva variable y en la instrucción if. Solo existe dentro de los bloques if y else:
if y := x * 2; y > 15 {
fmt.Println("y is greater than 15:", y)
// y solo existe en este bloque
} else {
fmt.Println("y is not greater than 15:", y)
// y también está disponible en los bloques else
}Después de ejecutar este código, Go calculará y como 20 (que es x * 2), comprobará si es mayor que 15 y después ejecutará el primer bloque. La salida aparecerá en la pantalla:
y is greater than 15: 20Por último, intentemos acceder a nuestras variables después de la instrucción if:
// fmt.Println(y) provocaría un error: y no existe aquí
fmt.Println("x is still:", x)Después de ejecutar este código, todavía podemos acceder a x, pero y ya no está disponible porque solo existía dentro de los bloques if y else. La salida se mostrará en la pantalla:
x is still: 10Esto demuestra el ámbito de una variable declarada en una instrucción if: la variable y solo es accesible dentro de los bloques condicionales donde se declaró. No hay ninguna y externa, así que aquí no se oculta nada. Si en su lugar la hubiéramos llamado x, ocultaría la x externa dentro de esos bloques, y la x externa seguiría siendo 10 después de ellos.
Desafío
PrincipianteEn este desafío, practicarás el sombreado de variables en una instrucción if. Verás cómo una variable declarada dentro de un bloque if puede tener el mismo nombre que una variable del ámbito externo, pero con un valor diferente.
El código tiene una variable message en el ámbito externo. Tu tarea es crear una variable sombreada con el mismo nombre dentro del bloque if y después imprimir ambas variables para ver el efecto del sombreado.
Pruébalo tú mismo
package main
import "fmt"
func main() {
// Variable del ámbito externo
message := "Hello from outer scope"
isLoggedIn := true
if isLoggedIn {
// TODO: Crea una nueva variable llamada 'message' con el valor "Hello from inner scope"
// Esto imprime el mensaje del ámbito interno
fmt.Println(message)
}
// Esto imprime el mensaje del ámbito externo
fmt.Println(message)
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisionesPractica por tu cuenta: Compilador de Go online