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

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

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

const { reverse } = require('hexlet/string');

const result = reverse('Hello!');
console.log(result); // => !olleH

Лирическое отступление. Первая строчка в этом коде, импорт функции из другого модуля. Импорты и модули изучаются на Хекслете, здесь же они будут присутствовать в задании “как есть”, так как без них невозможно использовать функции определенные в других файлах. Не заморачивайтесь если вам не понятен смысл этого действия, подробнее о нем можно узнать из курса введение в программирование

Мы создали константу result и указали интерпретатору записать в неё результат, который вернет вызов функции reverse. Запись reverse('Hello!') означает, что вызывается функция с именем reverse, в которую был передан параметр (или аргумент) 'Hello!'. Вызванная функция вернула значение.

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

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

const { pow } = require('hexlet/math');

const result = pow(2, 3); // 2 * 2 * 2
console.log(result); // => 8

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

Кстати console.log это ведь тоже вызов функции. Он выглядит немного странно из-за точки, но об этом мы поговорим позже.

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

Задание

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

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

const { calculateDistance } = require('hexlet/got');

const distance = calculateDistance('Lannisport', 'Bayasabhad');
console.log(distance);

Первая строчка — это специальный код, подключающий функцию calculateDistance в вашу программу. Благодаря ей вы можете запускать функцию, не видя её содержимое. Это обычное дело в программировании: вы знаете, что делает функция и как ей пользоваться, но не знаете, как именно она работает внутри.

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


Определения

  • Функция — операция, способная принимать данные и возвращать результат; функция вызывается так: foo().

  • Аргумент — информация, которую функция получает при вызове. Например, foo(42) — передача аргумента 42 функции foo


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

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

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