Функции и их вызов

Как вы заметили, для каждой операции требуется свой собственный символ (оператор): для сложения чисел и конкатенации строк — +, для деления чисел — /, и так далее. Такой подход оправдан только для самых частых операций, ведь в реальной жизни есть тысячи разных задач. К тому же, даже если бы язык программирования включал в себя тысячу разных операторов, в какой-то момент программисту понадобился бы новый.

Любой язык программирования позволяет расширять набор операций. Такие новые операции называются «функциями». Давайте сначала научимся пользоваться уже созданными функциями, а уже потом будем создавать новые функции.

Аналогично математике, в Java функция - это некое преобразование, которое применяется к каким-то значениям (например, к числам или тексту) и даёт некий результат. Значения, которые получает функция, называют её аргументами, а результат - возвращаемым значением функции. Так, функция взятия меньшего из двух чисел сравнивает их, и своим результатом назначает то число, которое меньше.

В Java существует огромное количество функций и для удобства они объединены в классы. Например, функции для работы с числами и математическими вычислениями реализованы в классе Math.

Чтобы воспользоваться функцией, ее вызывают в нужной части программы. Для вызова нужно указать имя класса, в котором хранится функция, поставить символ ., записать имя функции, а после имени указать (). Скобки нужны для того, чтобы в них записать аргументы функции.

В Java есть функция для нахождения минимального числа из двух. Вызовем её:

var result = Math.min(1, 5); // 1

Мы создали переменную result и записали в неё результат, который вернет функция Math.min(). Запись Math.min(1, 5) означает, что вызывается функция с именем min() из класса Math с аргументами (или с параметрами) 1 и 5. Вызванная функция вернула значение 1, поэтому в result в итоге оказалось значение 1.

Аргументы или параметры — это информация, которую функция получает при вызове. Именно на основе этой информации функция, как правило, вычисляет что-то и выдает результат. Количество аргументов функции может меняться в зависимости от потребностей функции. Например, для Math.min() мы указали два аргумента, когда вызывали ее выше, а для функции charAt() достаточно будет одного. А вот пример функции, которая не принимает аргументов:

var result = "Hello world!".length(); // 13

Функция length() возвращает длину строки.

Вы, вероятно, заметили сходство между вызовом Math.min() и вызовом System.out.println(). Дело в том, что System.out.println() тоже функция, только она не возвращает никакого значения. Чаще всего функции вызывают, чтобы использовать возвращаемые ими значения, но иногда (про это впереди будет урок про побочные эффекты) функцию вызывают ради чего-то другого, что эта функция делает в процессе вычисления результата, в случае System.out.println() функция в процессе своей работы выводит переданный ей аргумент в консоль, и именно ради этого побочного эффекта мы ее и вызываем.

Вы можете создавать собственные функции — мы займёмся этим в следующем модуле. Любое действие, которое вы себе можете вообразить, в программировании представлено функциями.

Задание

В 7 королевствах жил один человек, который имел доступ к компьютерам и умел программировать — Сэм Тарли. Он занимался картографией, поэтому он написал для себя функцию calculateDistance, высчитывающую расстояние (в лигах) между городами. Функция принимает два строковых параметра — названия двух городов, и возвращает число — расстояние между ними. Любая функция в java относится к какому-то классу, свою Сэм отнес к классу Functions.

Вот пример использования, где на экран выводится расстояние между Lannisport и Bayasabhad:

var distance = Functions.calculateDistance("Lannisport", "Bayasabhad");
System.out.println(distance);

Сэм написал свою функцию в отдельном классе, поэтому мы перед названием функции указываем название класса, в котором определена эта функция.

Этот код запускает вычисление функции calculateDistance().

Воспользуйтесь функцией calculateDistance() и выведите на экран расстояние между городами ‘Qarth’ и ‘Vaes Dothrak’. Не копируйте пример, а создайте переменную с другим именем и напишите код с нуля самостоятельно.


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном cообществе
Упражнение доступно только авторизованным пользователям.

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