"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Progresión del alcance

Progresión del alcance

Publicado el 2024-11-02
Navegar:172

Scope progression

En programación imperativa, normalmente tenemos un código que tiene el siguiente aspecto:

func addOneToSlice(xs []int) []int {
  rs := make([]int, len(xs))
  for i, value := range xs {
    rs[i] = value   1
  }
  return rs
}

Sin embargo, observe lo siguiente sobre el bucle for:

  • Cada iteración tiene un propósito específico, que es agregar uno al elemento actual.
  • Sin embargo, cada iteración no tiene restricciones sobre qué elemento puede operar.
  • Operar con xs[i 2] y rs[i 3] no alteraría fundamentalmente la estructura del código que tenemos, y al mismo tiempo haría que el resultado final fuera incorrecto.

Compare cómo se haría la misma tarea en F#:

let rec addOneToList =
  function
  | [] -> []
  | x :: xs -> x   1 :: addOneToList xs

Ahora considere lo siguiente:

  • Tenemos una lista como argumento de función.
  • Una lista en lenguajes funcionales es una lista enlazada.
  • Las operaciones eficientes y estándar en listas enlazadas son:
    • Separando la cabeza x de su cola xs
    • Haciendo algo en la cabeza x
    • Comparando la lista pasada como parámetro con la lista vacía []

Dadas estas restricciones, agregar 1 a cualquier elemento y que no esté al principio de la lista alteraría significativamente la estructura de nuestra función.

Ahora compara cómo avanza el cómputo en ambos estilos:

  • En el estilo funcional, creamos un nuevo alcance con nuevos valores, lo que implica realizar una llamada recursiva en el ejemplo anterior.
  • En el estilo imperativo, mutamos un valor existente sin cambiar el alcance.

En estilo funcional, combinar ambos ámbitos con el progreso computacional tiene las siguientes consecuencias:

  • Evitamos la mutación.
  • El flujo de ejecución es explícito.
  • La estructura que estamos tratando queda clara.
Declaración de liberación Este artículo se reproduce en: https://dev.to/lamg/scope-progression-4iil?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3