~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 9C0D5817F9A3AB07802E5A74ED9390A5__1711899240 ✰
Заголовок документа оригинал.:
✰ Block (programming) - Wikipedia ✰
Заголовок документа перевод.:
✰ Блок (программирование) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Block_(programming) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/9c/a5/9c0d5817f9a3ab07802e5a74ed9390a5.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/9c/a5/9c0d5817f9a3ab07802e5a74ed9390a5__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:09:33 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 31 March 2024, at 18:34 (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

Блок (программирование)

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

В компьютерном программировании блок , или блок кода или блок кода — это лексическая структура исходного кода сгруппированная вместе. Блоки состоят из одного или нескольких объявлений и операторов . Язык программирования , который позволяет создавать блоки, в том числе блоки, вложенные в другие блоки, называется языком программирования с блочной структурой . Блоки имеют фундаментальное значение для структурного программирования , где управляющие структуры формируются из блоков.

Блоки имеют две функции: группировать операторы, чтобы их можно было рассматривать как один оператор, и определять области действия имен , чтобы отличать их от того же имени, используемого где-либо еще. В языке программирования с блочной структурой объекты, названные во внешних блоках, видны внутри внутренних блоков, если только они не замаскированы объектом, объявленным с тем же именем.

История [ править ]

Идеи блочной структуры были развиты в 1950-х годах при разработке первых автокодов и были формализованы в отчетах Algol 58 и Algol 60 . В Алголе 58 появилось понятие «составного оператора», которое относилось исключительно к потоку управления . [1] В последующем пересмотренном отчете , описывающем синтаксис и семантику Алгола 60, было введено понятие блока и области действия блока , при этом блок состоит из «последовательности объявлений, за которой следует последовательность операторов и заключенной между началом и концом...» в что «[e] каждое объявление появляется в блоке таким образом и действительно только для этого блока». [2]

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

В разных языках блоки используют разный синтаксис. Две большие семьи:

Ограничения [ править ]

Некоторые языки, поддерживающие блоки с объявлениями, не полностью поддерживают все объявления; например, многие языки, производные от C, не допускают определения функции внутри блока ( вложенные функции ). И в отличие от своего предка Алгола, Паскаль не поддерживает использование блоков с собственными объявлениями внутри начала и конца существующего блока, а только составные операторы, позволяющие группировать последовательности операторов вместе в if , while , повторении и других управляющих операторах.

Основная семантика [ править ]

Семантическое значение блока двоякое. Во-первых, он дает программисту возможность создавать сколь угодно большие и сложные структуры, которые можно рассматривать как единицы. Во-вторых, это позволяет программисту ограничить область действия переменных, а иногда и других объявленных объектов.

В ранних языках, таких как Fortran IV и BASIC , не было блоков операторов или структур управления, кроме простых форм циклов. Условные операторы были реализованы с использованием операторов условного перехода :

ЯЗЫК C: СТАНДАРТ ANSI FORTRAN 66 
 C ИНИЦИАЛИЗАЦИЯ ВЫЧИСЛЯЕМЫХ ЗНАЧЕНИЙ 
       PAYSTX   =   .   ЛОЖЬ  . 
        ПЛАТЕЖ   =   .   ЛОЖЬ  . 
        НАЛОГ   =   0,0 
       СУПТАКС   =   0,0 
 C ПРОПУСТИТЬ НАЛОГОВЫЙ ВЫЧЕТ, ЕСЛИ СОТРУДНИК ЗАРАБАТЫВАЕТ МЕНЬШЕ НАЛОГОВОГО ПОРОГА, 
       ЕСЛИ   (  WAGES   .  LE  .   TAXTHR  )   ПЕРЕХОДИТЕ К   100 
       PAYSTX   =   .   ИСТИННЫЙ  . 
        НАЛОГ   =   (  ЗАРАБОТНАЯ ПЛАТА   -   НАЛОГ  )   *   BASCRT 
 ЕСЛИ СОТРУДНИК ЗАРАБАТЫВАЕТ МЕНЬШЕ ПОРОГА СУПЕРНАЛОГА 
       ЕСЛИ   (  WAGES.LE.SUPTHR   ,  К  СУПЕРНАЛОГА ,   C ПРОПУСТИТЬ ВЫЧЕТ  )   ПЕРЕХОДИТЕ   100 
       PAYSST   =   .   ИСТИННЫЙ  . 
        СУПТАЛОГ   =   (  ЗАРАБОТНАЯ ПЛАТА   -   НАЛОГ  )   *   СУПРАТ 
 100   НАЛОГ   =   ЗАРАБОТНАЯ ПЛАТА   -   НАЛОГ   -   СУПТАЛОГ 

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

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

    {Язык: Дженсен и Вирт Паскаль } 
     если   заработная плата   >   налог_порог   , то 
         начинается 
         paystax   :=   true  ; 
          налог   :=   (  зарплаты   -   налог_порог  )   *   налог_рейт 
         { Блочная структура облегчает понимание того, как код может 
 быть реорганизован для ясности, а также упрощает это, 
 поскольку структуру внутреннего условного выражения можно легко вынести 
 за пределы внешнее условное выражение в целом, и последствия этого 
 легко предсказать.   } 
         если   заработная плата   >   supertax_threshold   , то   начать 
             pays_supertax   :=   true  ; 
              supertax   :=   (  зарплата   -   supertax_threshold  )   *   supertax_rate 
         end 
         else   Begin 
             pays_supertax   :=   false  ; 
              supertax   :=   0 
         end 
     end 
     else   Begin 
         paystax   :=   false  ;    pays_supertax   :=   ложь  ; 
          налог   :=   0  ;    суперналог   :=   0 
     конец  ; 
      облагается налогом   :=   заработная плата   -   налог   -   суперналог  ; 

Использование блоков в приведенном выше фрагменте Паскаля проясняет замысел программиста и позволяет объединить полученные блоки во вложенную иерархию условных операторов. Структура кода более точно отражает мышление программиста, облегчая его понимание и модификацию.

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

В примитивных языках переменные имели широкую область применения. Например, целочисленная переменная с именем IEMPNO может использоваться в одной части подпрограммы Фортрана для обозначения номера социального страхования сотрудника (ssn), но во время работ по обслуживанию той же подпрограммы программист может случайно использовать ту же самую переменную, IEMPNO, для другая цель, и это могло привести к ошибке, которую было трудно отследить. Блочная структура позволяет программистам контролировать масштаб до мельчайших деталей.

;;   Язык: Стандартная схема R5RS 
 (  let   ((  empno   (  ssn-   имя-сотрудника  ))) 
   (  while   (  is-manager   empno  ) 
     (  let   ((  сотрудники   (  length   (  подчиненные-of   empno  )))) 
       (  printf   "~a has ~a сотрудники, работающие под его началом:~%"   имя-сотрудника   сотрудники  ) 
       (  for-each 
         (  лямбда   (  empno  ) 
           ;; В этом лямбда-выражении переменная empno относится к ssn 
           ;; подчиненного. Переменная empno во внешнем выражении , 
           ;; ссылается на ssn менеджера, затеняется 
           (  printf   "Имя: ~a, роль: ~a~%" 
                   (  имя-   эмпно  ) 
                   (  роль-   эмпно  ))) 
         (  подчиненные-   эмпно  )))) ) 

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

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

В некоторых языках переменная может быть объявлена ​​в области функции даже внутри закрытых блоков. Например, в JavaScript переменные, объявленные с помощью var иметь область действия.

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

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

  1. ^ Перлис, Эй Джей ; Самельсон, К. (1958). «Предварительный отчет: международный алгебраический язык» . Коммуникации АКМ . 1 (12). Нью-Йорк, штат Нью-Йорк, США: ACM: 8–22. дои : 10.1145/377924.594925 . S2CID   28755282 .
  2. ^ Бэкус, JW ; Бауэр, Флорида ; Грин, Дж.; Кац, К.; Маккарти, Дж.; Перлис, Эй Джей; Рутисхаузер, Х .; Самельсон, К.; Вокуа, Б .; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. (май 1960 г.). Наур, Питер (ред.). «Отчет по алгоритмическому языку АЛГОЛ 60» . Коммуникации АКМ . 3 (5). Нью-Йорк, штат Нью-Йорк, США: ACM: 299–314. дои : 10.1145/367236.367262 . ISSN   0001-0782 . S2CID   278290 . Проверено 27 октября 2009 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 9C0D5817F9A3AB07802E5A74ED9390A5__1711899240
URL1:https://en.wikipedia.org/wiki/Block_(programming)
Заголовок, (Title) документа по адресу, URL1:
Block (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)