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.