stringtranslate.com

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

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

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

var lastWasA = ложь   // TreeBin представляет собой двоичное дерево строк.// treebin - это либо // - строка, либо // - {l : <treebin>, r: <treebin>}// содержит ли упорядоченный обход листьев этого дерева // '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 { // не строка, должен быть внутренним узлом: return (( aThenB ( treebin . l )) || ( aThenB ( treebin . r ))); } }                                                      

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

function aThenB ( treebin , LastWasA ) { if ( typeof ( treebin ) === "строка" ) { if ( treebin === "a" ) { return { result : false , LastWasA : true }; } Еще если ( treebin === "b" ) { если ( lastWasA ) { возвращение { результат : правда , LastWasA : ложь }; } } Еще { возврат { результат : ложь , LastWasA : ложь }; } } else { // не строка, должен быть внутренним узлом: var leftCall = aThenB ( treebin.l , lastWasA ); если ( leftCall . result ) { вернуться { результат : true , lastWasA : false } } else { вернуть aThenB ( treebin.r , leftCall.lastWasA ) ;} } }                                                                    

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

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

Смотрите также

Ссылки

  1. ^ Фридман, Дэниел; Ванд, Митчелл (апрель 2008 г.). Основы языков программирования (3-е изд.). Бостон, Массачусетс: MIT Press. ISBN 978-0262062794.
  2. ^ Кришнамурти, Шрирам (ноябрь 2012 г.). Языки программирования, применение и интерпретация (2-е изд.). Самоизданный . Получено 10 февраля 2016 г.