~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ BD9C68D98FFBF73F89EF195C40C2FE98__1714567920 ✰
Заголовок документа оригинал.:
✰ Variable shadowing - Wikipedia ✰
Заголовок документа перевод.:
✰ Переменное затенение — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Variable_shadowing ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/bd/98/bd9c68d98ffbf73f89ef195c40c2fe98.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/bd/98/bd9c68d98ffbf73f89ef195c40c2fe98__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 19:22:58 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 1 May 2024, at 15:52 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Переменное затенение — Википедия Jump to content

Переменное затенение

Из Википедии, бесплатной энциклопедии

В компьютерном программировании затенение переменных происходит, когда переменная, объявленная в определенной области (блоке принятия решений, методе или внутреннем классе ), имеет то же имя, что и переменная, объявленная во внешней области. На уровне идентификаторов (имен, а не переменных) это называется маскированием имени . Говорят, что эта внешняя переменная затенена внутренней переменной, тогда как внутренний идентификатор маскирует внешний идентификатор. Это может привести к путанице, поскольку может быть неясно, к какой переменной относятся последующие использования имени затененной переменной, что зависит от правил разрешения имен языка.

Одним из первых языков, в котором было реализовано затенение переменных, был ALGOL , в котором впервые были введены блоки для установления областей видимости. Это также было разрешено многими производными языками программирования, включая C , C++ и Java .

Язык C# нарушает эту традицию, допуская затенение переменных между внутренним и внешним классом, а также между методом и содержащим его классом, но не между блоком if и содержащим его методом или между операторами case в блоке переключателя .

Некоторые языки допускают затенение переменных в большем количестве случаев, чем другие. Например , Kotlin позволяет внутренней переменной в функции скрывать переданный аргумент, а переменная во внутреннем блоке — скрывать другую во внешнем блоке, тогда как Java этого не позволяет. Оба языка позволяют передавать аргумент функции/методу для скрытия поля класса. [1]

Некоторые языки полностью запрещают затенение переменных, например CoffeeScript . [2]

Пример [ править ]

Возьмите [ править ]

Следующий код Lua представляет собой пример затенения переменных в нескольких блоках.

v   =   1   -- глобальная переменная 

 do 
   local   v   =   v   +   1   -- новая локальная переменная, которая затеняет глобальную v 
   print  (  v  )   -- печатает 2 

   do 
     local   v   =   v   *   2   -- другая локальная переменная, которая затеняет внешний локальный v 
     print  (  v  )   — печатает 4 
   end 

   print  (  v  )   — печатает 2 
 end 

 print  (  v  )   — печатает 1 

Питон [ править ]

Следующий код Python представляет собой еще один пример затенения переменных:

x   =   0 

 def   Outer  (): 
     x   =   1 

     Def   Inner  (): 
         x   =   2 
         print  (  «inner:»  ,   x  ) 

     внутренний  () 
     print  (  «outer:»  ,   x  ) 

 внешний  () 
 print  (  «global:»  ,   x  ) 

 # печатает 
 # внутреннее: 2 
 # внешнее: 1 
 # глобальное: 0 

Поскольку в Python нет объявления переменных, а есть только присвоение переменных, ключевое слово nonlocal представленный в Python 3, используется, чтобы избежать затенения переменных и присвоения нелокальных переменных:

x   =   0 

 def   external  (): 
     x   =   1 

     def   Internal  (): 
         нелокальный   x 
         x   =   2 
         print  (  «inner:»  ,   x  ) 

     внутренний  () 
     print  (  «outer:»  ,   x  ) 

 внешний  () 
 print  (  «global: "  ,   x  ) 

 # печатает 
 # внутренний: 2 
 # внешний: 2 
 # глобальный: 0 

Ключевое слово global используется, чтобы избежать затенения переменных и присваивания глобальным переменным:

x   =   0 

 def   external  (): 
     x   =   1 

     def   Internal  (): 
         global   x 
         x   =   2 
         print  (  «inner:»  ,   x  ) 

     внутренний  () 
     print  (  «outer:»  ,   x  ) 

 внешний  () 
 print  (  «global: "  ,   x  ) 

 # печатает 
 # внутренний: 2 
 # внешний: 1 
 # глобальный: 2 

Ржавчина [ править ]

fn   main  ()   { 
     let   x   =   0  ; 
    
      { 
         // Тень 
         let   x   =   1  ; 
          распечататьлн!   (  "Внутренний x: {}"  ,   x  );    // печатает 1 
     } 
    
     println!   (  "Внешний x: {}"  ,   x  );    // печатает 0 
    
     let   x   =   "Rust"  ; 
      распечататьлн!   (  "Внешний x: {}"  ,   x  );     // печатает 'Rust' 
 } 

 //# Внутренний x: 1 
 //# Внешний x: 0 
 //# Внешний x: Rust 

С++ [ править ]

#include   <iostream> 

 int   main  () 
 { 
   int   x   =   42  ; 
    интервал   сумма   =   0  ; 

    для   (  int   я   знак равно   0  ;   я   <   10  ;   я  ++  )   { 
     int   x   знак равно   я  ; 
      std  ::  cout   <<   "x:"   <<   x   <<   '\n'  ;    // печатает значения i от 0 до 9 
     sum   +=   x  ; 
    } 

   std  ::  cout   <<   "sum:"   <<   sum   <<   '\n'  ; 
    std  ::  cout   <<   "x:"   <<   x     <<   '\n'  ;    // выводит 42 

   return   0  ; 
  } 

Ява [ править ]

общественный   класс   Shadow   { 
     частное   int   myIntVar   =   0  ; 

      public   voidshadowTheVar   // Поскольку оно имеет то же имя ,  ()   { 
         что и поле экземпляра объекта выше, оно затеняет 
         // поле выше внутри этого метода. 
          int   myIntVar   =   5  ; 

          // Если мы просто ссылаемся на 'myIntVar', то будет найден один из этих методов 
         // (затеняющий второй с тем же именем) 
         System  .   вне  .   println  (  myIntVar  );    // печатает 5 

         // Если мы хотим обратиться к затененному myIntVar из этого класса, нам нужно 
         // обратиться к нему так: 
         System  .   вне  .   println  (  это  .myIntVar  )  ;    // печатает 0 
     } 

     public   static   void   main  (  String  []   args  ) { 
         new   Shadow  ().   теньТеВар  (); 
      } 
 } 

JavaScript [ править ]

ECMAScript 6: введение let и const с областью действия блока позволяют затенение переменных.

function   myFunc  ()   { 
     let   my_var   =   'test'  ; 
      if   (  true  )   { 
         let   my_var   =   'новый тест'  ; 
          консоль  .   журнал  (  my_var  );    // новый тест 
     } 
     console  .   журнал  (  my_var  );    // проверка 
 } 
 myFunc  (); 

См. также [ править ]

Ссылки [ править ]

  1. ^ «От Java к Котлину и обратно» . Архивировано из оригинала 28 ноября 2020 г. Проверено 4 октября 2021 г.
  2. ^ «Пожалуйста, введите явное затенение · Проблема № 2697 · jashkenas/Coffeescript» . Гитхаб . Архивировано из оригинала 04 октября 2021 г. Проверено 4 октября 2021 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: BD9C68D98FFBF73F89EF195C40C2FE98__1714567920
URL1:https://en.wikipedia.org/wiki/Variable_shadowing
Заголовок, (Title) документа по адресу, URL1:
Variable shadowing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)