O que é sobrecarga de função?
A sobrecarga de funções é um recurso de muitas linguagens de programação em que vários métodos podem ser criados com o mesmo nome, mas com diferentes parâmetros de entrada ou tipos de retorno. Esse é um recurso comum na programação orientada a objetos; construtores em particular podem ter várias variantes sobrecarregadas diferentes. Essencialmente, a sobrecarga de funções é útil quando duas funções fazem coisas muito semelhantes e podem receber vários tipos de entrada para isso. Os construtores podem ser sobrecarregados facilmente porque não possuem um tipo de retorno explícito especificado; portanto, simplesmente alterar os parâmetros de entrada de um construtor seria uma sobrecarga válida.
A primeira maneira pela qual uma função pode ser sobrecarregada é alterando seus parâmetros de entrada. Por exemplo, pode-se considerar uma função chamada "add" que recebe como entrada dois números inteiros. O objetivo desta função é bastante óbvio; destina-se a encontrar a soma de dois números inteiros.
Se alguém quisesse encontrar a soma de dois números flutuantes, ou números decimais, no entanto, essa função não seria aplicável. Portanto, seria necessária uma segunda função sobrecarregada, definida como uma função chamada "add", que recebe como entrada duas flutuações. As funções fazem essencialmente a mesma coisa, mas a sobrecarga de funções é necessária porque suas entradas são significativamente diferentes.
A segunda maneira pela qual uma função pode ser sobrecarregada é alterar os parâmetros de entrada e o tipo de retorno. Usando o exemplo anterior, pode-se considerar se ambas as funções "add" sobrecarregadas tinham um tipo de retorno nulo; isto é, eles não retornaram nada. Isso ainda seria uma sobrecarga de função válida, mas os tipos de retorno dos dois métodos também poderiam ser alterados. Em outra instância válida de sobrecarga, a função "add" que usa dois números inteiros pode retornar essa soma de número inteiro e a função "add" que usa dois números decimais pode retornar essa soma de número decimal.
Simplesmente alterar o tipo de retorno de uma função, no entanto, não é considerado uma sobrecarga de função válida. Alterar apenas o tipo de retorno de uma função resulta em ambiguidade, porque na assinatura do método não fica claro qual tipo de retorno é desejado. Os parâmetros também podem ser definidos de forma ambígua, portanto, é muito importante que as funções sobrecarregadas sejam chamadas corretamente. Por exemplo, se um tiver uma função sobrecarregada com um número inteiro como parâmetro de entrada e outro com um número decimal como parâmetro, seria muito fácil alguém chamar acidentalmente a função de número decimal em vez da função de número inteiro ou vice-versa, porque eles têm o mesmo nome. Parâmetros ambíguos como esses devem ser evitados, se possível, e se não puderem, deve-se tomar muito cuidado para garantir que a função sobrecarregada adequada seja chamada nos momentos adequados.
A sobrecarga de funções é útil para criar funções relacionadas com tipos de entrada variados e oferece bastante flexibilidade ao código. Uma consideração final sobre funções sobrecarregadas é que comentários adequados são essenciais. Embora possa ficar claro por diferentes parâmetros de entrada qual versão de uma função sobrecarregada é adequada para uma situação específica, nem sempre é claro com precisão o que a função faz de maneira diferente dos outros parceiros sobrecarregados.