A assinatura serve para identificar um método de forma única.
Para isso, é utilizada qualquer informação disponível no método. Como por exemplo:
- O nome;
- Os parâmetros;
- Ou até seu retorno.
Porém as regras variam dependendo da linguagem. O mais comum é analisar apenas o nome e os parâmetros.
Então, além do nome…
Se todos os parâmetros forem iguais, você tem o mesmo método. Se apenas um deles for diferente, você tem um método diferente.
Veja abaixo, 3 funções diferentes, mas com o mesmo nome:
calcular(valor1: number): number { ... }
calcular(valor1: number, valor2: number): number { ... }
calcular(valor1: string): number { ... }
Note que os 2 primeiros exemplos possuem uma quantidade de parâmetros diferente.
Enquanto o terceiro possui a mesma quantidade, mas o tipo é string
.
Qualquer uma dessas mudanças altera a assinatura do método e torna ele único.
Então, para serem considerados iguais e gerar um conflito, 2 métodos precisariam ter:
- A mesma quantidade de argumentos;
- Do mesmo tipo;
- E na mesma ordem.
// Métodos iguais: mesmo nome, sem parâmetros
calcular(): number { ... }
calcular(): string { ... }
// Métodos iguais: mesmo nome, 1 parâmetro "number"
calcular(valor1: number): number { ... }
calcular(valor2: number): number { ... }
Mas porque existe assinatura de método?
Nas linguagens mais antigas, cada função é identificada apenas pelo seu nome.
Porém, em linguagens mais modernas, vários métodos podem ter o mesmo nome. E você precisa evitar confundi-los de alguma forma.
Para isso, existe o conceito de assinatura de função. Ou, no caso de linguagens orientadas a objeto, assinatura de método.
O que deixa a linguagem mais versátil, podendo executar uma lógica diferente só de mudar 1 dos parâmetros.
Hey,
o que você achou deste conteúdo? Conte nos comentários.
Referências:
Stack Overflow
Universidade Java
Fluxo de Informação
Pooperrotti