Menu
Coddy logo textTech

Затенение переменных в `if`

Часть раздела Основы путешествия по GO на Coddy — урок 37 из 109.

Давайте изучим затенение переменных в инструкциях if. Это позволяет вам создать переменную, которая существует только внутри блока if и связанных с ним блоков else.

Сначала давайте создадим переменную вне нашего условного оператора:

x := 10
fmt.Println("Original x value:", x)

После выполнения этого кода у нас будет переменная x со значением 10, которую мы сможем использовать на протяжении всей нашей программы.

Теперь давайте воспользуемся затенением переменных в операторе if, чтобы создать новую переменную, которая существует только внутри этого блока:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y существует только в этом блоке
} else {
    fmt.Println("y is not greater than 15:", y)
    // y также доступна в блоках else
}

После выполнения этого кода Go вычислит y как 20 (что равно x * 2), проверит, больше ли оно 15, и затем выполнит первый блок. Результат отобразится на экране:

y is greater than 15: 20

Наконец, давайте попробуем получить доступ к нашим переменным после инструкции if:

// fmt.Println(y) вызовет ошибку — y здесь не существует
fmt.Println("x is still:", x)

После выполнения этого кода мы все еще можем получить доступ к x, но y больше не доступна, так как она существовала только внутри блоков if и else. Результат на экране будет следующим:

x is still: 10

Это демонстрирует, как работает затенение переменных в операторах if — переменная y доступна только внутри условных блоков, в которых она была объявлена.

challenge icon

Задание

Новичок

В этом испытании вы попрактикуетесь в затенении переменных (variable shadowing) в операторе if. Вы увидите, как переменная, объявленная внутри блока if, может иметь то же имя, что и переменная во внешней области видимости, но с другим значением.

В коде есть переменная message во внешней области видимости. Ваша задача — создать затененную переменную с тем же именем внутри блока if, а затем вывести обе переменные, чтобы увидеть эффект затенения.

Шпаргалка

Затенение переменных в операторах if позволяет создавать переменные, которые существуют только внутри условного блока и связанных с ним блоков else.

Синтаксис затенения переменных в операторах if:

if variable := expression; condition {
    // переменная существует только в этом блоке
} else {
    // переменная также доступна в блоках else
}

Пример:

x := 10
if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
} else {
    fmt.Println("y is not greater than 15:", y)
}
// y здесь больше не доступна
fmt.Println("x is still:", x)

Затененная переменная доступна только внутри блоков if и else, в которых она была объявлена, и недоступна за их пределами.

Попробуйте сами

package main

import "fmt"

func main() {
	// Переменная внешней области видимости
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: Создайте новую переменную с именем 'message' и значением "Hello from inner scope"
		
		// Это выводит сообщение из внутренней области видимости
		fmt.Println(message)
	}
	
	// Это выводит сообщение из внешней области видимости
	fmt.Println(message)
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы