Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Необязательные параметры методов Основы Java

Автосервис

В программировании большое количество функций и методов имеют параметры, которые редко меняются.

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

Это наглядно видно на таком примере:

class App {
    // Функция возведения в степень
    // Степень — это второй параметр со значением по умолчанию 2
    function pow(x, base = 2) {
      return x ** base;
    }
}

App.pow(3); // Результат — 9, так как по умолчанию возводим во вторую степень
// Возводим в третью степень
App.pow(3, 3); // 27

В отличие от других языков, в Java нет возможности задать значение по умолчанию, но ее можно имитировать с помощью перегрузки методов.

Что это такое? Java позволяет создать несколько методов с одинаковым именем. У таких одинаковых методов должны быть:

  • Разные типы входных параметров
  • Разное количество параметров
  • Или все это одновременно

Посмотрим на примере метода, складывающего два числа:

class App {
    public static int sum(int x, int y) {
        return x + y;
    }
}

App.sum(2, 3); // 5

Теперь напишем другой метод sum(), который принимает только один параметр и складывает его с числом 10:

class App {
    public static int sum(int x) {
        return x + 10;
    }
}

App.sum(2); // 12
App.sum(2, 1); // 3

Компилятор без проблем выполнит такой код и создаст два метода с одним именем. Как Java узнает, какой метод нужно использовать?

Все очень просто: во время компиляции выбирается та версия метода, которая совпадает по типу и количеству параметров. Если такой метод не был найден, то возникнет ошибка.

Как минимум с одним перегруженным методом мы уже встречались — это метод substring(). По умолчанию он извлекает подстроку до конца, но ему можно передать второй параметр, который ограничит длину:

// Вызываются два разных метода с одним именем
"hexlet".substring(3); // "let"
"hexlet".substring(3, 5); // "le"

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

Для снижения дублирования достаточно сделать два шага:

  • Сначала определить общий метод, который принимает больше всего параметров
  • Затем вызывать его из тех методов, где есть значения по умолчанию

В коде это выглядит так:

class App {
    public static int sum(int x, int y) {
        return x + y;
    }

    public static int sum(int x) {
        // Вызываем уже готовый метод суммирования
        return sum(x, 10);
    }
}

https://replit.com/@hexlet/java-basics-default-parameters

В этом примере мы не сократили код, но он наглядно показывает принцип, описанный выше.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
9 февраля 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»