Skip to content

Instantly share code, notes, and snippets.

@samflores
Last active February 9, 2021 15:28
Show Gist options
  • Save samflores/4be2298ac6e9b2561108f87df39e93a6 to your computer and use it in GitHub Desktop.
Save samflores/4be2298ac6e9b2561108f87df39e93a6 to your computer and use it in GitHub Desktop.

Já que estamos falando de semântica, minhas considerações finais:

event handler onFinish naturalmente é feito usando callbacks

está em questão se é semântico chamar esse argumento de callback

O argumento é o valor que é passado no parâmetro de uma função, que nesse caso acontece de ser outra função.

A confusão parece estar no fato de que você está rotulando a função em si (o argumento e não o parâmetro) como callback ou não. E não é isso que estou argumentando. Vou escrever um exemplo só pra ter nomes para chamar as coisas:

// vamos fazer de conta que essa é a função que é chamada quando um evento externo (click) acontece
// a implementação real de um event **trigger** com certeza seria mais interessante que isso, mas essa serve pro que quero dizer
function onClick(fnToCall) {
  let ev = new ClickEvent(whatever);
  return fnToCall(ev);
}

function onClickHandler(ev) {
  alert('clicked');
}

onClick(onClickHandler); // <= 1
onClickHandler(x); // <= 2

Eu não estou dizendo que a função onClickHandler É um callback. Nem um event handler, nem um componente, nem qualquer coisa. É um dado (que nesse caso é uma função). Mas que ao ser passada no parâmetro fnToCall (1) ela se comporta como callback no contexto da função onClick porque a função onClick chama essa função que ela recebeu. A chamada (2) é só a aplicação de uma função, onde não existe um contexto onde a função é um callback.

Um outro exemplo (claramente forçado) só pra tentar usar uma analogia pra esclarecer meu ponto:

function doSomethingUpTo(threshold) {
  // faz qualquer coisa que usa a variável threshold
}

let n = 10;

doSomethingUpTo(n);

Nesse exemplo eu não posso dizer que o número 10 É um threshold de algo. Ele é apenas um valor (dado). No context da função doSomethingUpTo ele se comporta como um limite pra alguma operação, então eu decidi chamar o parâmetro de threshold. E quando o valor for aplicado a essa função o meu limite por acaso vai ser 10. Eu posso até argumentar que a variável n representa o meu threshold, mas n não é o meu dado, é apenas um nome. O dado 10 não é um threshold.

Mesma ideia com a função onClickHandler acima.

Um event handler é um caso específico de uso de um callback, assim como uma função de mapping, mas em nenhum dos dois caso a função é um callback, se comporta como um ao ser chamada pela outra função que a recebeu.

p.s. Em todos os lugares onde eu fui assertivo e escrevi é eu não estou dizendo que isso é a verdade e outras interpertações estão erradas, só que baseado nos conceitos que me foram passados ao longo dos anos essa é a minha interpretação.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment