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

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

<?php

$number = 2 * 2 * 2;

Но это не очень удобно и наглядно, особенно если степень будет большой. Идеально иметь соответствующий оператор (в PHP он уже есть), но что делать если его нет? Для таких задач в программировании используются функции. Они тоже бывают встроенные, но что самое главное, функции можно добавлять самостоятельно. Перед тем как мы начнем делать собственные функции, давайте сначала научимся использовать встроенные. В PHP есть функция для возведения числа в какую-нибудь степень. Вызовем её:

<?php

$result = pow(2, 3); // 8

Мы создали переменную $result и указали интерпретатору записать в неё результат, который выдаст функция pow. Запись pow(2, 3) означает, что вызывается функция с именем pow и с аргументами (или с параметрами) 2 и 3. Вызванная функция вернула значение.

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

Функция pow возводит первое число в степень второго числа. В нашем примере мы возводили 2 в степень 3, поэтому в $result в итоге оказалось значение 8.

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

<?php

$result = 2 ** 3; // 8

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

<?php

$result = abs(-5); // 5
$result = abs(8);  // 8

Как видно, эта функция принимает один аргумент (часто говорят «параметр») и возвращает его модуль. А вот пример функции, которая не принимает аргументов:

<?php

$result = rand();

Функция rand генерирует и возвращает случайное число.

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

Задание

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

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

<?php

use function HexletBasics\Functions\calculateDistance;

$distance = calculateDistance('Lannisport', 'Bayasabhad');
print_r($distance);

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

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


Определения

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

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


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

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

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