Jump to content

Стиль прохождения магазина

Стиль передачи данных из хранилища — это метод программирования, который используется для моделирования изменяемого состояния без использования изменяемого состояния. [1] [2] Обычно оно возникает при конвертации императивных программ в чисто функциональные .

Итак, например, рассмотрим эту программу на JavaScript , написанную в стиле без передачи данных в хранилище:

var lastWasA = false

// a treebin represents a binary tree of strings.

// a treebin is either
// - a string, or
// - {l : <treebin>, r: <treebin>}

// does an in-order traversal of this tree's
// leaves contain an 'a' followed by a 'b'?
function aThenB(treebin) {
    if (typeof(treebin) === "string") {
        if (treebin === "a") {
            lastWasA = true;
            return false;
        } else if (treebin === "b") {
            if (lastWasA) {
                return true;
            } else {
                lastWasA = false;
                return false;
            }
        } else {
            lastWasA = false;
            return false;
        }
    } else { // not a string, must be an internal node:
        return ((aThenB(treebin.l))||(aThenB(treebin.r)));
    }
}

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

function aThenB(treebin, lastWasA) {
    if (typeof(treebin) === "string") {
        if (treebin === "a") {
            return {result: false, lastWasA: true};
        } else if (treebin === "b") {
            if (lastWasA) {
                return {result: true, lastWasA: false};
            }
        } else {
            return {result: false, lastWasA: false};
        }
    } else { // not a string, must be an internal node:
        var leftCall = aThenB(treebin.l, lastWasA);
        if (leftCall.result) {
            return {result: true, lastWasA: false}
        } else {
            return aThenB(treebin.r, leftCall.lastWasA);
        }
    }
}

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

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

См. также

[ редактировать ]
  1. ^ Фридман, Дэниел; Ванд, Митчелл (апрель 2008 г.). Основы языков программирования (3-е изд.). Бостон, Массачусетс: MIT Press. ISBN  978-0262062794 .
  2. ^ Кришнамурти, Шрирам (ноябрь 2012 г.). Языки программирования, применение и интерпретация (2-е изд.). самостоятельно опубликовано . Проверено 10 февраля 2016 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f49510ad69c16b5dfac97afd6d7ebcb2__1681380060
URL1:https://arc.ask3.ru/arc/aa/f4/b2/f49510ad69c16b5dfac97afd6d7ebcb2.html
Заголовок, (Title) документа по адресу, URL1:
Store-passing style - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)