Перейти к основному содержимому
  1. Rust/

Области видимости в Rust

342 слов·2 минут· loading · loading · ·
Rust Dev
Оглавление
about-rust - Эта статья часть цикла.
Часть 7: Эта статья

Блоки и скоупы
#

Подключим воображение чтобы лучше понять эту тему.

Итак, существует переменная со своей силой. Теперь представьте себе область видимости как некую территорию на которой эта переменная имеет силу. В Rust такая территория называется скоупом (Scope). В этой статье мы поговорим о том, что такое скоуп/блоки и как это всё работает.

Блок (Block) - это область между открытыми и закрытыми фигурными скобками. Каждый раз, когда вы пишете фигурные скобки, например после названия функции:

fn hello() { 
    1

   
       2
   
}

вы создаете новый блок 1 . Все, что находится внутри этого блока 2 считается его областью видимости.

Пример:

Создадим переменную для хранения значения срабатывания датчика движения от 0 до 100%

fn main(){ 
    3

    let move_sensor = 10;
}

Теперь зададим себе вопрос: в какой области эта переменная доступна? Ответом будет: область видимости переменной move_sensor - главная функция 3 (main).

Стало чуть понятнее? Хорошо тогда движемся дальше.

Вложенные скоупы
#

Что если мы хотим создать новый скоуп внутри функции main? Мы можем сделать это используя фигурные скобки:

fn main(){
    let move_sensor = 10;
    {
        
            4
        
    }
}

Мы создали новый блок - вложенная область видимости или вложенный контекст 4 если сказать иначе.

Взаимодействие между скоупами
#

Как я уже упоминал в прошлой статье про затенение, внутренний скоуп может захватывать переменные из внешнего скоупа. Но в обратную сторону это не сработает. Вы не сможете объявить в внутреннем скоупе переменную и использовать её вне его границ.

fn main(){

    {
        let light_sensor = 20;
        println!("Value of light sensor is {light_sensor}");
    }  
    5

    println!("Value of light sensor is {light_sensor}"); // ERROR!!!
}

Ошибка - cannot find value 'light_sensor' in this scope.

Все! переменная датчика света не существует дальше границ блока где она была объявлена 5 .

Вывод
#

Вложенный скоуп можно представить как некий портал в который вы можете что-то принести, но вынести из него ничего нельзя. ✨

Важно запомнить, что:

  • Переменные существуют внутри скоупа, в котором они объявлены.
  • Внутренний скоуп может захватывать переменные из внешнего скоупа.
  • Вы не можете использовать переменную вне ее скоупа.

Теперь вы знаете как правильно “готовить” области видимости в Rust! 😉

about-rust - Эта статья часть цикла.
Часть 7: Эта статья

Связанные статьи

Разбираемся с ошибками в Rust
392 слов·2 минут· loading · loading
Rust Dev
Затенение переменных в Rust
463 слов·3 минут· loading · loading
Rust Dev
Изменяемые и неизменяемые переменные в Rust
419 слов·2 минут· loading · loading
Rust Dev