В прошлом уроке мы рассмотрели словари: https://medium.com/@mikeabelar/web-development-with-hhvm-and-hack-6- dictionaries-f951c9a557f7. В этом руководстве мы рассмотрим функции в Hack.
Что такое функции?
Функции позволяют нам взять код, который служит определенной цели, и поместить этот код в специальный блок кода.
Примеры функций
Рассмотрим пример сложения двух чисел. Скажем, у нас есть следующий код (находится в файле с именем functions.hack
):
<<__EntryPoint>> function main(): noreturn { // code here $sum = 5 + 4; print($sum); print("\n"); exit(0); }
Когда мы запускаем код (с hhvm functions.hack
), код выводит «9». В настоящее время мы складываем 5 и 4 и сохраняем результат в переменной с именем sum
. Строка кода для сложения 5 и 4 служит для сложения двух чисел. Давайте посмотрим, что произойдет, если мы возьмем тот же код и используем его с функцией:
function add_two_numbers(int $num_1, int $num_2) : int { return $num_1 + $num_2; } <<__EntryPoint>> function main(): noreturn { // code here $sum = add_two_numbers(5, 4); print($sum); print("\n"); exit(0); }
Давайте сначала посмотрим на объявление созданной нами новой функции:
function add_two_numbers(int $num_1, int $num_2) : int { return $num_1 + $num_2; }
Мы можем объявить новую функцию, начав с ключевого слова function
, за которым следует имя функции: add_two_numbers
.
Мы заметим, что за именем функции следуют круглые скобки и переменные:
add_two_numbers(int $num_1, int $num_2)
Эти переменные называются параметрами. Они служат входными данными для нашей функции. Вы заметите, что за каждой переменной идет int
. int
обозначает целое число, которое является типом переменной. Типы параметров следует указывать при объявлении функции. Другие типы переменных могут включать числа с плавающей запятой, строки или логические значения. Затем мы разделяем параметры запятыми.
Теперь посмотрим, что следует за круглыми скобками:
function add_two_numbers(int $num_1, int $num_2) : int
: int
указывает тип возвращаемого значения функции. Возврат функции - это результат, который она производит, который можно присвоить переменной. В этом случае мы возвращаем целое число. Мы рассмотрим примеры других функций, которые имеют другой тип возвращаемого значения. Вы также можете заметить, что наша основная функция имеет следующее объявление:
function main(): noreturn
Эта функция имеет noreturn
в качестве возвращаемого типа. Это означает, что функция ничего не вернет.
Теперь давайте посмотрим на тело функции:
return $num_1 + $num_2;
Код вернет результат $num_1
и $num_2
. Тип возвращаемого значения этого выражения, int, соответствует типу возвращаемого значения функции. Помните, что целое число плюс и целое число дают целое число. Мы возвращаем значение из функции с помощью ключевого слова return
. Примечание: после ключевого слова return код не должен идти. Ключевое слово return отмечает конец функции. Функция завершается, когда возвращает значение.
Другие примеры функций:
Следующий код объединяет две строки:
function concat_two_strings(string $string_1, string $string_2) : string { return $string_1 . $string_2; } <<__EntryPoint>> function main(): noreturn { // code here $combined_string = concat_two_strings("Hello ", "World"); print($combined_string); print("\n"); exit(0); }
Код печатает: Hello World
Примечание: использование типа string
как для параметров, так и для типа возвращаемого значения.
В следующем коде используется функция, которая дважды печатает сообщение:
function print_twice(string $string_to_print) : void { print($string_to_print . "\n"); print($string_to_print . "\n"); } <<__EntryPoint>> function main(): noreturn { // code here print_twice("Hi!"); exit(0); }
Обратите внимание на тип возврата void
для функции print_twice
. Мы можем использовать возвращаемый тип noreturn
только тогда, когда мы включаем вызов функции exit();
в конце функции, как в main
. Мы используем void, если ничего не возвращаем и не вызываем exit()
.
В следующем коде используется функция, которая не принимает параметров и выводит сообщение:
function print_a_message() : void { print("Hey!\n"); } <<__EntryPoint>> function main(): noreturn { // code here print_a_message(); exit(0); }
В этом примере мы видим, что print_a_message
не принимает никаких параметров. Поэтому, когда мы вызываем функцию, мы можем просто оставить круглые скобки пустыми.
В следующем уроке мы рассмотрим больше циклов: https://medium.com/@mikeabelar/web-development-with-hhvm-and-hack-8-loops-dbe86a85df4