[sign in]

What's a Closure?

  1. O que é Closure?
  2. Variáveis e valores
  3. Definindo funções
  4. Efeitos paralelos
  5. Funções são valores
  6. Retornando funções
  7. Escopo da função
  8. Funções aninhadas
  9. Cada Closures com seu estado
  10. Dados Privados
  11. Callbacks assíncronos
  12. Passando uma continuação

Passando uma continuação

Uma continuação é um callback que representa o que fazer a seguir . Você chama uma continuação no lugar do retorno da função, pra que, ao invés de ela retornar um valor e parar, ela faça algo na sua continuação. Se você converter seu código pra nunca usar return e só fazê-lo usar continuações, você transformará seu programa em um continuation-passing style que pra facilitar traduzirei como estilo contínuo. Aqui está uma função que adiciona 1 a um número, no modo regular e no estilo contínuo.

No estilo contínuo, toda função recebe um parâmetro extra ret que é chamado no lugar do retorno.

Nós não estamos limitados a apenas uma continuação. Vamos supor que todas as funções têm uma continuação success e uma failure. Aqui temos como ficaria o addOne com esta impĺementação.

Aqui temos um exemplo de operação sequencial seqC. A função seqC tem duas funções fC e gC, juntamente com os continuadores success e failure. As funções fC e gC recebem os continuadores success e failure, eles não lidam com todos os dados. O operador seqC roda fC e se for bem sucedido, dá continuação. Se fC falhar, então rodará gC e continuará.

Este código pode ser simplificado. Por exemplo, nós podemos dizer success no lugar de f_success. Aqui está a versão simplificada.

Defina uma função chamada bothC similar a seqC que recebe as funções tC e gC e os continuadores success e failure. As funções fC e gC ambas têm apenas os continuadores success e failure. Sua função bothC deve chamar fC e gC, independente de qualquer coisa, mas só deve chamar success se ambas tiverem sucesso, senão chame failure. Não esqueça, sua função nuca retornará!

1:1

about news main