Перегрузка функций (function overloading) представляет определение нескольких функций с одним и тем же именем, но с различными параметрами. Параметры перегруженных функций могут отличаться по количеству, типу или по порядку в списке параметров.
fun sum(a: Int, b: Int) : Int{ return a + b } fun sum(a: Double, b: Double) : Double{ return a + b } fun sum(a: Int, b: Int, c: Int) : Int{ return a + b + c } fun sum(a: Int, b: Double) : Double{ return a + b } fun sum(a: Double, b: Int) : Double{ return a + b }
В данном случае для одной функции sum()
определено пять перегруженных версий. Каждая из версий отличается либо по типу, либо количеству, либо по порядку параметров.
При вызове функции sum компилятор в зависимости от типа и количества параметров сможет выбрать для выполнения нужную версию:
fun main() { val a = sum(1, 2) val b = sum(1.5, 2.5) val c = sum(1, 2, 3) val d = sum(2, 1.5) val e = sum(1.5, 2) }
При этом при перегрузке не учитывает возвращаемый результат функции. Например, пусть у нас будут две следующие версии функции sum:
fun sum(a: Double, b: Int) : Double{ return a + b } fun sum(a: Double, b: Int) : String{ return "$a + $b" }
Они совпадают во всем за исключением возвращаемого типа. Однако в данном случае мы сталкивамся с ошибкой, так как перегруженные версии должны отличаться именно по типу, порядку или количеству параметров. Отличие в возвращаемом типе не имеют значения.