Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

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

Из Википедии — свободной энциклопедии

Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.

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

Блок в коде иногда сравнивают с параграфом в тексте, хотя эти понятия имеют существенные различия.

С одной стороны, блок – крайне простая концепция программирования, с другой стороны, в некоторых языках программирования, например, в JavaScript, он связан с не малым количеством малозаметных специфичных особенностей, порой усложняющих оперирование им.

Выделение блока

Для выделения блоков применяются специальные конструкции языка программирования. Например, в семействе Си-подобных языков (С, C++, Java) и в языке JavaScript применяются фигурные скобки («{» и «}»). В языках, основанных на ALGOL, применяются ключевые слова begin и end (операторные скобки). В языках, основанных на Lisp, применяются S-выражения (lambda, let и т. д.) В языке Python блоки определяются различиями в отступе строк кода от левого края начала строки (обычно в 4 символа пробела).

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

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

Область видимости блока в некоторых языках имеет довольно нетривиальное поведение. Например, в языке JavaScript её действие зависит от нескольких обстоятельств.

Особенности

В языках семейства Smalltalk блоки — это объекты со всеми соответствующими возможностями.

В языке JavaScript синтаксис блока аналогичен синтаксису литерала объекта, а семантика этих конструкций определяется внешним контекстом — принадлежностью к выражению, так как, в частности, алгоритм определения семантики внутренним контекстом столкнётся с неразрешимыми неоднозначностями. Также в нём инструкция break не видит меток за пределами функции, непосредственно в которой она применяется, что может служить веским аргументом в пользу реализации в JavaScript do-выражений.

Примеры

Блок внутри функции на языке (Си):

 {
   int a = 1;
   int b = 2;
   int с = a + b;
   return c; 
 }

Блок на языке Pascal:

 begin
   a := 5;
   b := a - 2;
 end

Пример блока на Transact-SQL:

 BEGIN
   SET @a = 'f'
   IF @b = 1
     SET @a = @a + ',f'
   ELSE IF @b = 2
     SET @a = @a + ',e'
 END

Блок на языке JavaScript без метки:

{
    const a = 1, b = 2,
          c = a + b;
}

Пустой блок без метки вложенный в множество блоков без меток на языке JavaScript:

{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

Демонстрация одной из особенностей области видимости блока в JavaScript:

{
    let a = 1;
    var b = 2;
    console.log(b) // 2
    console.log(a) // 1
}
console.log(b) // 2
console.log(a) // ReferenceError!

Несмотря на особенность, продемонстрированную в предыдущем примере, следующий пример кода на языке JavaScript приведёт к синтаксической ошибке.

{
    let a = 1;
    var a = 1;
}

Блок на языке JavaScript с меткой и прерыванием его выполнения инструкцией break по его же метке (обратите внимание на отсутствие конфликта между меткой и одноимённым идентификатором):

x: {
    const x = 0;
    console.log(x);
    break x;
    console.log(x);
}

Разные семантики {...} в языке JavaScript (ошибочное содержимое используется с целью продемонстрировать определение семантики внешним контекстом):

// Блок кода
{ _: 1, _: 2, } + []; // SyntaxError!

// Блок кода
eval('{ _: 1, _: 2, }') // SyntaxError!
eval('{ valueOf: _ => Math.random() }') /*Неразрешимая неоднозначность для алгоритма определения семантики внутренним контекстом*/

// Литерал объекта
eval('({ _: 1, _: 2, })')
eval('+{ valueOf: _ => Math.random() }')

// Часть синтаксиса стрелочной функции
(() => { _: 1, _: 2, })() // SyntaxError!
// Литерал объекта
(() => ({ _: 1, _: 2, }))()

Демонстрация «слепоты» инструкции break языка JavaScript:

x: {
    console.log(1);
    (() => {
        break x; // SyntaxError!
    })();
    console.log(2);
}
Эта страница в последний раз была отредактирована 31 августа 2021 в 12:01.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).