Зачем нужен блок инструкций без управляющей инструкции?

Ссылка скопирована
1 ответ

Вопрос возник в ходе изучения кода React.

Вот пример:

var currentExtraStackFrame = null; function setExtraStackFrame(stack) {   {     currentExtraStackFrame = stack;   } }

var currentExtraStackFrame = null; function setExtraStackFrame(stack) { { currentExtraStackFrame = stack; } }

Зачем нужна подобная конструкция? Есть ли какой-то смысл объявлять блок инструкций без управляющей инструкции?

Дополнительно:

Что такое в вашем понимании «управляющая инструкция»? Что вас в этом коде смущает? Какой у этого кода контекст?
Реакту такая конструкция не очень свойственна.

  • Алексей Уколов, управляющая инструкция в моём понимании if, for, function. Те инструкции, после которых обычно идёт блок. Меня здесь ничего не смущает, но интересно для чего currentExtraStackFrame = stack; обернули в блок дважды.
  • А, понял. Не увидел второй набор скобок. Думаю, это просто ошибка.
  • Алексей Уколов, нет, это не ошибка. Это точно сделано намеренно, так как конструкция повторяется очень часто. Вот я и пытаюсь понять для чего. Что такое знали разработчики react, чего не знаю я.
  • Алексей Уколов, мне что-то кажется что здесь код вырвано из контекста объяснений различия var и let.
  • В изначальных исходниках там TypeScript. Вы смотрите уже скомпилированный код. В исходниках местами все обернуто в разные условия, завязанные на__DEV__:

    export function setExtraStackFrame(stack: null | string): void {   if (__DEV__) {     currentExtraStackFrame = stack;   } }

    export function setExtraStackFrame(stack: null | string): void { if (__DEV__) { currentExtraStackFrame = stack; } }

    Когда происходила сборка кода, который вы смотрите, вероятно __DEV__ был true, условие было опущено, т.к. оно всегда выполняется, а скобки остались как артефакт. Скорее всего транспилятор TS не проверяет весь контекст, и чтобы ничего не сломать случайно, оставляет скобки на своих местах.

    • Да, уверен, вы правы. Спасибо! За ссылку исходники отдельная благодарность.
    • Hardelele, Чуть-чуть дополню ответ. В первую очередь это нужно, чтобы гарантированно не сломать область видимости переменных, объявленных через let или const. Блок, ограниченный фигурными скобками, имеет собственную область видимости.

    Любой блок создает лексическую область видимости (переменные объявленные с помощью let и const видны только в пределах своего блока).

    Очень похоже, что такой код уже обработан какими либо инструментами.
    Допустим в исходном коде было что-то вроде:

    var currentExtraStackFrame = null; function setExtraStackFrame(stack) {   if (process.env.NODE_ENV === 'production') {     currentExtraStackFrame = stack;   } }

    var currentExtraStackFrame = null; function setExtraStackFrame(stack) { if (process.env.NODE_ENV === 'production') { currentExtraStackFrame = stack; } }

    В процессе сборки process.env.NODE_ENV было заменено на 'production', а так как 'production' === 'production' - это всегда истинное условие, то от if можно избавиться, оставив только его тело, вот только от блока при этом инструменты не избавляются, так как можно сломать видимость переменных.

    Ответы:

    var currentExtraStackFrame = null; // это нужно, чтобы не словить предупреждение в консоль undefined variable/property при обращении к свойству currentExtraStackFrame // этим методом вы задаете какое-то значение для свойства currentExtraStackFrame, если его нужно привести в какое-то не null значение (или вернуть в null - значение по умолчанию). function setExtraStackFrame(stack) {   // if() тут может была лексема if, можно просто ее закомментить и не убирать скобки, чтобы git не анализировать их исправление, и так будет работать   {     currentExtraStackFrame = stack;   } }

    var currentExtraStackFrame = null; // это нужно, чтобы не словить предупреждение в консоль undefined variable/property при обращении к свойству currentExtraStackFrame // этим методом вы задаете какое-то значение для свойства currentExtraStackFrame, если его нужно привести в какое-то не null значение (или вернуть в null - значение по умолчанию). function setExtraStackFrame(stack) { // if() тут может была лексема if, можно просто ее закомментить и не убирать скобки, чтобы git не анализировать их исправление, и так будет работать { currentExtraStackFrame = stack; } }

    • Вопрос в другом. currentExtraStackFrame = stack; обёрнут в фигурные скобки дважды. Первый блок относится к функции setExtraStackFrame, а второй блок не имеет управляющей инструкции. И вопрос как раз в том, зачем нужен этот второй блок без инструкции.
    • Написал предположение на счет скобок.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

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

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

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

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно