¿Cómo se llama esta técnica de programación?

13

Encontré esta técnica de programación mientras realizaba la programación de pares en una entrevista y no pude encontrar el nombre en google.

La idea es que primero escribas la expresión que usa las variables y luego escribes el código que computa las variables más adelante.

Para usar algún código de ejemplo aquí:

private bool ValidPolicyNumber(string policyNumber) 
{
    var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC";
    var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
    var hasLengthOf12 = policyNumber.Length == 12;

    return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;
}

Al escribir esta función usando la técnica que mencioné, primero escribirías la última línea return hasExpectedPrefix && followedBy7Digits && hasLengthOf12; y luego las 3 líneas que la preceden.

La técnica más cercana que pude encontrar es la "ilusión" y eso es de SICP, pero se relaciona con las funciones de llamada que implementará más adelante en lugar de usar las variables que inicializará más adelante.

    
pregunta user2108462 06.04.2017 - 21:00

2 respuestas

13

Es solo una variación de composición funcional.

Testigo:

private bool ValidPolicyNumber(string policyNumber) 
{
    return hasExpectedPrefix(policyNumber) 
        && followedBy7Digits(policyNumber) 
        && hasLengthOf12(policyNumber);
}

private bool hasExpectedPrefix(string policyNumber)
{
    return policyNumber.Substring(0,5) == "POLIC";
}

private bool followedBy7Digits
{
    return Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
}

private bool hasLengthOf12
{
    return policyNumber.Length == 12;
}

La única diferencia real es que su versión combina los resultados calculados de las funciones más pequeñas en un solo ámbito funcional, que es lo que desea a menos que las expresiones funcionales más pequeñas estén destinadas a ser reutilizadas en otro lugar.

    
respondido por el Robert Harvey 06.04.2017 - 21:42
9

Esto podría ser simplemente una sugerencia de Clean Code (el libro), que se usará cuando la Descomposición funcional (como lo explicó Robert) no es aplicable debido a que las funciones no son reutilizables por sí mismas.

Sin embargo, si desea obtener información técnica al respecto, el libro Patrones de implementación , de Kent Beck, denomina esta técnica como Explicando las variables locales (énfasis mío):

  

Variable local

     

Las variables locales solo son accesibles desde su punto de declaración a   El fin de su alcance. Siguiendo el principio de que la información   debe propagarse lo menos posible, declarar las variables locales solo   antes de que se utilicen y en el ámbito más interno posible.

     

Hay un puñado de roles comunes para las variables locales:

     
  • Collector: una variable que recopila información para su uso posterior. A menudo   El contenido de los recopiladores se devuelve como el valor de una función.   Cuando se devuelva un colector, nómbrelo como resultado o resultados.

  •   
  • Count: un recopilador especial que recopila el recuento de algunos otros objetos.

  •   
  • Explicando: si tienes una expresión complicada, asigna bits de   La expresión a variables locales puede ayudar a los lectores a navegar por el   complejidad:

         

    int top = ...;

         

    int left = ...;

         

    int altura = ...;

         

    int bottom = ...;

         

    devolver un rectángulo nuevo (arriba, izquierda, altura, ancho);

         

    Si bien no es computacionalmente necesario, las variables locales explicativas ayudan a lo que de otro modo sería una expresión larga y complicada.

  •   
    
respondido por el MichelHenrich 06.04.2017 - 23:02

Lea otras preguntas en las etiquetas