stringtranslate.com

Estilo de paso de tienda

El estilo de paso de tienda es una técnica de programación que se utiliza para modelar el estado mutable sin utilizar el estado mutable. [1] [2] Generalmente surge en la conversión de programas imperativos en programas puramente funcionales .

Por ejemplo, considere este programa de JavaScript , escrito en un estilo sin paso de almacenamiento:

var lastWasA = falso   // un treebin representa un árbol binario de cadenas.// un treebin es // - una cadena, o // - {l : <treebin>, r: <treebin>}// ¿un recorrido en orden de las hojas de este árbol contiene una 'a' seguida de una '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 { // no es una cadena, debe ser un nodo interno: return (( aThenB ( treebin.l ) ) || ( aThenB ( treebin.r ) ) ) ; } }                                                      

Contiene una referencia a una variable global . En el estilo de transferencia de almacenamiento, el valor de la variable (o variables) global se transfiere a cada llamada, y también se devuelve desde cada llamada y se procesa a través de la siguiente llamada. El código podría verse así:

función 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 { // no es una cadena, debe ser un nodo interno : var leftCall = aThenB ( treebin.l , lastWasA ) ; if ( leftCall.result ) { return { result : true , lastWasA : false } } else { return aThenB ( treebin.r , leftCall.lastWasA ) ; } } }                                                                    

Tenga en cuenta que cada llamada toma un argumento adicional y ahora se devuelven dos valores: el valor de retorno ordinario y un nuevo valor que representa el estado de la variable anteriormente mutable.

El estilo de paso de tienda puede ser bastante complicado de escribir, pero puede ayudar a eliminar las condiciones de carrera al aislar el estado dentro de las llamadas de función y, potencialmente, puede hacer que el código sea más paralelizable .

Véase también

Referencias

  1. ^ Friedman, Daniel; Wand, Mitchell (abril de 2008). Fundamentos de lenguajes de programación (3.ª ed.). Boston, MA: MIT Press. ISBN 978-0262062794.
  2. ^ Krishnamurthi, Shriram (noviembre de 2012). Lenguajes de programación, aplicación e interpretación (2.ª ed.). autoeditado . Consultado el 10 de febrero de 2016 .