Skip to main content

Что такое перегрузка функций?

Перегрузка функций - это особенность многих языков программирования, где можно создать несколько методов с одним и тем же именем, но с разными входными параметрами или типами возвращаемых данных. Это общая черта в объектно-ориентированном программировании; в частности, конструкторы могут иметь несколько различных перегруженных вариантов. По сути, перегрузка функций полезна, когда две функции делают очень похожие вещи и могут делать для этого несколько типов ввода. Конструкторы могут быть легко перегружены, поскольку у них не указан явный возвращаемый тип, поэтому простое изменение входных параметров конструктора будет допустимой перегрузкой.

Первый способ перегрузки функции - изменение ее входных параметров. Например, можно рассмотреть функцию «add», которая принимает в качестве входных данных два целых числа. Цель этой функции довольно очевидна; он предназначен для нахождения суммы двух целых чисел.

Однако, если кто-то хочет найти сумму двух чисел с плавающей запятой или десятичных чисел, эта функция не будет применима. Таким образом, потребуется вторая перегруженная функция, определенная как функция с именем «add», которая принимает в качестве входных данных два числа с плавающей запятой. Функции выполняют, по сути, одно и то же, но перегрузка функций необходима, потому что их входы существенно различаются.

Второй способ перегрузки функции - изменить как входные параметры, так и тип возвращаемого значения. Используя предыдущий пример, можно рассмотреть, имели ли обе перегруженные функции «add» возвращаемый тип void; то есть они ничего не вернули. Это все равно будет допустимой перегрузкой функции, но типы возврата двух методов также могут быть изменены. В другом допустимом случае перегрузки функция «add», которая принимает два целых числа, может вернуть эту сумму целых чисел, а функция «add», которая принимает два десятичных числа, может вернуть эту сумму десятичных чисел.

Однако простое изменение типа возврата функции не считается допустимой перегрузкой функции. Изменение только возвращаемого типа функции приводит к неоднозначности, поскольку из сигнатуры метода не ясно, какой тип возвращаемого значения является желательным. Параметры также могут быть определены неоднозначно, поэтому очень важно, чтобы перегруженные функции вызывались правильно. Например, если одна имеет перегруженную функцию с целым числом в качестве входного параметра, а другая с десятичным числом в качестве параметра, было бы очень легко случайно вызвать функцию десятичного числа вместо функции целого числа. или наоборот, потому что они имеют одинаковые имена. По возможности следует избегать неоднозначных параметров, таких как эти, и, если это невозможно, следует проявлять большую осторожность, чтобы гарантировать, что надлежащая перегруженная функция вызывается в нужное время.

Перегрузка функций полезна для создания связанных функций с различными типами ввода и обеспечивает большую гибкость кода. И последнее замечание по перегруженным функциям заключается в том, что необходимо адекватное комментирование. Хотя из-за отличия входных параметров может быть ясно, какая версия перегруженной функции подходит для конкретной ситуации, не всегда может быть ясно, что именно делает функция в отличие от других перегруженных партнеров.