Создание (определение) функции

Определение собственных функций, значительно упрощает написание и поддержку программ. Функции позволяют объединять сложные (составные) операции в одну. Например отправка письма на сайте, это достаточно сложный процесс, включающий в себя взаимодействие с внешними системами (интернет). Благодаря возможности определять функции, вся сложность может быть скрыта за простой функцией:

import { send } from 'some-email-package';
const email = '[email protected]';
const title = 'Помогите';
const body = 'Я написал историю успеха, как я могу получить скидку?';
send(email, title, body);

Создадим нашу первую функцию. Ее задача вывести на экран следующий текст:

Today is: December 5
// Определение функции
// Определение не вызывает функцию
// Мы лишь говорим, что теперь такая функция существует
const showCurrentDay = () => {
  const text = 'Today is: December 5';
  console.log(text);
};

// Вызов функции
showCurrentDay();

Для любознательных. Такая функция в JavaScript называется стрелочной. Она появилась со стандартом языка es6. Далее мы будем работать только со стрелочными функциями.

Определение функции выше, состоит из двух частей:

  • Присваивание функции константе
  • Непосредственно определение функции

Само по себе определение функции, это все что находится после присвоения:

// Обратите внимание на стиль
// Пробелы между символами
// Открывающая скобка там же где и стрелка
// Закрывающая на своей отдельной строчке
() => {
  const text = 'Today is: December 5';
  console.log(text);
};

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

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

const doSomething = /* определение любой функции */;

В отличие от обычных данных, функции выполняют действия, поэтому их имена, практически всегда, должны быть глаголами: “построить что-то”, “нарисовать что-то”, “открыть что-то”.

Все что описывается внутри фигурных скобок {} называется телом функции. Внутри тела можно описывать любой код. Считайте, что это маленькая самостоятельная программа, набор произвольных инструкций. Тело выполняется ровно в тот момент, когда запускается функция. Причем каждый вызов функции запускает тело независимо от других вызовов. Кстати тело может быть пустым:

// Минимальное определение функции которая ничего не делает
const noop = () => {};

noop(); // вызов есть, а смысла нет
// Такая функция тоже бывает полезна
// Но это относится к продвинутым темам

Понятие «создать функцию» имеет много синонимов: «реализовать», «определить» и даже «заимплементить» (от слова implement). Все они встречаются в повседневной практике на работе.

Задание

Реализуйте функцию printMotto, которая печатает на экран фразу Winter is coming.

printMotto(); // => Winter is coming

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


Советы


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

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