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

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

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

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

Инструкция java для вычисления значения функции на заданных значениях аргументов называется вызовом функции.

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

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

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

Аргументы — это информация, которую функция получает при вызове. Именно на основе этой информации функция, как правило, вычисляет что-то и выдает результат.

Функция Math.min возвращает минимальное число из двух. В нашем примере мы искали минимальное из чисел 1 и 5, поэтому в result в итоге оказалось значение 1.

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

А вот пример функции, которая не принимает аргументов:

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

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

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

Задание

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

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

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

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

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

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


Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

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