Что такое Overload

Ответ

Перегрузка (Overload) позволяет создавать несколько методов с одинаковым именем, но разными параметрами (тип, количество, порядок). Компилятор выбирает подходящий метод на основе аргументов.

Пример:

fun sum(a: Int, b: Int): Int {
    return a + b
}

fun sum(a: Double, b: Double): Double {
    return a + b
}

Ключевые моменты:

  • Различается только сигнатура (параметры)
  • Возвращаемый тип не учитывается
  • Упрощает API, делая его интуитивным
  • Часто используется в конструкторах

Ответ 18+ 🔞

А, ну это простая штука, если честно. Представь, что у тебя есть один инструмент, но он может делать разную хуйню в зависимости от того, что ты в него суёшь. Вот это и есть перегрузка, ёпта.

Смотри, вот у тебя есть функция sum. Ну, сложить что-то. Но что, если тебе надо сложить не только целые числа, но и дробные? Писать две функции с разными именами, типа sumInt и sumDouble? Да ну нахуй, это же неудобно, мозги выносит. Тут-то перегрузка и спасает.

Ты просто пишешь две функции с одним и тем же именем sum, но с разными параметрами. Компилятор — он не дурак, он смотрит, что ты ему подсовываешь. Подсунул два Int — он вызовет первую. Подсунул два Double — он пойдёт ко второй. Удобно же, блядь? Не надо запоминать кучу названий, просто знаешь, что sum складывает, а уж как именно — система разберётся.

Вот смотри на этот код, тут всё понятно:

fun sum(a: Int, b: Int): Int {
    return a + b
}

fun sum(a: Double, b: Double): Double {
    return a + b
}

Видишь? Имя одно — sum. А внутри скобок — разное. Это и есть сигнатура. Компилятор именно по ней и отличает, какую из двух одинаковых по имени функций тебе запустить. Главное правило, которое надо запомнить, чтобы не охуеть потом: возвращаемый тип — в жопу, его не учитывают. Нельзя сделать перегрузку, где всё одинаково, а возвращается разное. Компилятор тебе такого не позволит, он скажет: «Чувак, я нихуя не пойму, какую из этих двух функций ты хочешь, если на вход ты даёшь одно и то же». И будет прав, сука.

Зачем это всё? Ну, чтобы твой код был проще и понятнее. API становится интуитивным. Хочешь что-то сложить — вызываешь sum и не паришься. А уж система сама подберёт нужный вариант. Чаще всего эту фишку в конструкторах используют, чтобы объект можно было создавать разными способами. В общем, штука полезная, не игнорируй её.