Articulo de referencia

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 convers...

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 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Estilo_de_entrada_a_tienda&oldid=1149632620"