Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Callbacks?

Existe algum curso que explique o que significa uma linguagem de programação ser assíncrona ou síncrona? No Java eu nunca tinha visto ainda funções call-backs, nem no JavaScript lá no Front end. Eu percebi que essa estrutura que funções callbacks é bastante usada aqui no JavaScript backend com o uso de bibliotecas. Isso significa que em tempo de execução, quando um callback é definido, ele espera o retorno do callback antes de executar a próxima linha? É normal uma linguagem de programação usar estruturas de callbacks e outras não? Como identificar isso? É possível forçar uma linguagem a adotar callbacks?

1 resposta
solução!

Olá, Igor! Tudo certo?

Não acredito que haja um curso especificamente sobre linguagens assíncronas ou síncronas, mas vou tentar te explicar abaixo.

Programas síncronos

Os programas síncronos são um pouco mais naturais de entender, porque é como se eles "soubessem" que uma operação irá levar algum tempo, sem que você precise avisar.

A filosofia natural desse tipo de programa é: rodar sequencialmente comandos, de cima para baixo. Ele não diferencia operações que precisam de mais tempo ou menos tempo, apenas executa um comando após outro ter sido concluído, e assim vai.

Então, se temos uma pilha de processos, e um processo está levando mais tempo, este processo fica no topo, sendo executado, até que ele seja concluído, removido da pilha, e o próximo processo se inicia.

Isso faz com que o programa "trave", aguardando esse processo que leva mais tempo ser concluído. O motivo é que estamos rodando em apenas uma Thread. No Java temos a main, que é a Thread principal. Se rodarmos todos os processos nela, consequentemente, ela pode rodar apenas um de cada vez, funcionando de forma sequencial.

Programas assíncronos

É o caso do Node.js, uma plataforma que trabalha de forma assíncrona. Basicamente, o Node não espera pela conclusão de uma tarefa como ler banco de dados. O programa continua suas tarefas, enquanto o processo assíncrono está rodando. Uma vez que esse processo for concluído, o Node executa o callback.

Da própria documentação do Node sobre callbacks, destaco este trecho:

Callbacks te dão uma inerface com a qual você pode dizer, "e quando você terminar aquilo, faça tudo isto".

Outro ponto interessante é o seguinte:

Isso permite que você tenha o tanto de operações IO que o seu OS aguenta acontecendo ao mesmo tempo.

O que acontece aqui é que estamos rodando processos paralelos ao invés da forma sequencial. Para isso, o Node implementa sua própria solução para tornar esse tipo de processamento possível.


Sobre suas últimas perguntas, sim é normal que as linguagens tenham abordagens diferentes, tanto por questão de necessidade quanto pela forma com que foram construídas.

O Java, por exemplo, funciona de forma síncrona. Entretanto, você pode trabalhar com processamento assíncrono, se aproveitar de Threads, Runnable e outras ferramentas que a linguagem oferece (você pode ver mais neste curso aqui: Threads em Java 1: Programação paralela).

Acredito que em muitas linguagens você pode implementar algum padrão de callbacks próprio, mas talvez seja um pouco mais manual e menos natural do que o Node justamente porque ele já fez esse tipo de implementação para nós, e apenas nos resta usar.

Cada linguagem tem a sua forma de trabalhar, além de suas convenções.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software