"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Progressão do escopo

Progressão do escopo

Publicado em 2024-11-02
Navegar:389

Scope progression

Na programação imperativa, geralmente temos código que se parece com o seguinte:

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

No entanto, observe o seguinte sobre o loop for:

  • Cada iteração tem um propósito específico, que é adicionar um ao elemento atual.
  • No entanto, cada iteração não tem nenhuma restrição sobre qual elemento ela pode operar.
  • Operar com xs[i 2] e rs[i 3] não alteraria fundamentalmente a estrutura do código que temos, ao mesmo tempo que tornaria o resultado final incorreto.

Compare como a mesma tarefa seria feita em F#:

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

Agora considere o seguinte:

  • Temos uma lista como argumento de função.
  • Uma lista em linguagens funcionais é uma lista vinculada.
  • As operações eficientes e padrão em listas vinculadas são:
    • Separando a cabeça x da cauda xs
    • Fazendo alguma coisa na cabeça x
    • Comparando a lista passada como parâmetro com a lista vazia []

Dadas essas restrições, adicionar 1 a qualquer elemento y que não esteja no topo da lista alteraria significativamente a estrutura de nossa função.

Agora compare como o cálculo progride em ambos os estilos:

  • No estilo funcional, criamos um novo escopo com novos valores, o que envolve fazer uma chamada recursiva no exemplo acima.
  • No estilo imperativo, modificamos um valor existente sem alterar o escopo.

No estilo funcional, casar ambos os escopos com o progresso computacional tem as seguintes consequências:

  • Evitamos mutação.
  • O fluxo de execução é explícito.
  • A estrutura com a qual estamos lidando fica clara.
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/lamg/scope-progression-4iil?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3