Затенение переменных в `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 доступна только внутри условных блоков, в которых она была объявлена.
Задание
НовичокВ этом испытании вы попрактикуетесь в затенении переменных (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)
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений