Pular para o conteúdo

Programação reativa

Sinal, derivado e efeito: um valor que outros valores acompanham — com as dependências descobertas na execução.

A linguagem já tinha três formas de lidar com mudança, e nenhuma resolvia o mesmo problema: Arcane.Eventos é um emissor, Arcane.Stream são tópicos com offset (Kafka, e não RxJS), e stream action é um gerador preguiçoso. O que faltava é a quarta — um valor que outros valores acompanham.

É a diferença entre "me avise quando algo acontecer" e "este total é sempre a soma daqueles três".

dataforge
adopt Arcane.Reativo as R

preco := R.sinal(10.0)
quantidade := R.sinal(3)
total := R.derivado(lambda => preco.ler() * quantidade.ler())

out total.ler()          // 30.0
quantidade.escrever(5)
out total.ler()          // 50.0  ninguem recalculou a mao

Sinal é valor; observável é fluxo#

Sinal tem um estado agora, e quem pergunta recebe o valor de agora. Observável não tem estado: quem se inscreve recebe o que vier daqui para a frente. Um clique é um fluxo; um saldo é um valor.

As peças#

O que é
R.sinal(v)um valor com estado: ler, escrever, atualizar, observar
R.derivado(f)calculado de outros — preguiçoso e memorizado
R.efeito(f)o que acontece quando muda; roda uma vez ao nascer
R.lote(f)várias escritas, uma notificação
R.observavel()um fluxo no tempo, com morph, sift, distill
R.de_cluster · R.intervalofontes frias: só começam quando alguém escuta
R.juntar · R.combinardois fluxos num só

Onde continuar#