Menu
CoddyTech

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: 20

Por ú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: 10

Esto 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.

challenge icon

Desafío

Principiante

En 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)
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Compilador de Go online