Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ru]: update translation of Glossary: First-class function #16722

Merged
68 changes: 58 additions & 10 deletions files/ru/glossary/first-class_function/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,67 @@ title: Функции первого класса
slug: Glossary/First-class_Function
---

Если язык программирования имеет функции первого класса, то значит они трактуются как объекты, то есть могут быть переданы другим функциям и их можно вернуть из функций. Так же их можно присваивать переменным.
{{GlossarySidebar}}

## Пример
Говорят, что в языке программирования есть **функции первого класса**, если с функциями в этом языке обращаются как с любой другой переменной. Например, передают в качестве аргумента другим функциям, возвращают из другой функции или присваивают переменной в качестве значения.

```
/* функция не имеет имени и находится в правой части команды присваивания переменной.*/
## Примеры

### Присвоение функции в качестве значения переменной

var dog = function(num) {
for (var i = 0; i < num; i++) {
alert("Woof");
}
```js
const foo = () => {
console.log("foobar");
};
dog(3); //Эту функцию можно вызвать через переменную dog.

// Вызов функции с использованием переменной
foo(); // Выведет в консоль строку "foobar"
```

Мы присвоили _анонимную функцию_ {{glossary("Variable", "переменной")}}, а затем использовали эту переменную для вызова функции, добавив круглые скобки `()` в конце.

> **Примечание:** Даже если у вашей функции было имя, вы можете использовать имя переменной для её вызова. Именование функции будет полезно при отладке кода, _но это не повлияет на то, как мы её вызываем_.

### Передача функции в качестве аргумента

```js
function sayHello() {
return "Привет, ";
}

function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}

// Передача функции `sayHello` в качестве аргумента функции `greeting`
greeting(sayHello, "JavaScript!"); // Выведет в консоль строку "Привет, JavaScript!"
```

Такое использование ключевого слова function — внутри команды, как в команде присваивания, — называется функциональным выражением. В отличие от объявления, эта функция не имеет имени. Кроме того, результатом этого выражения является значение, которое затем присваивается переменной dog. Что это за значение? Мы присваиваем его переменной dog, а затем вызываем через эту переменную, значит, это есть ссылка на функцию.
Мы передали нашу функцию `sayHello()` в качестве аргумента функции `greeting()`, это показывает, что функцию можно рассматривать в качестве значения.

> **Примечание:** Функция, которую передают в качестве значения другой функции (в данном примере `sayHello()`), называется _{{glossary("callback function", "колбэк-функцией")}}_.

### Возвращение функции

```js
function sayHello() {
return () => {
console.log("Привет!");
};
}

// Вызов анонимной функции, которую возвращает функция `sayHello`. Обратите внимание на повторяющиеся два раза круглые скобки
sayHello()(); // Выведет в консоль строку "Привет!"
```

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

> **Примечание:** Функция, которая возвращает функцию или принимает другие функции в качестве аргументов, называется _функцией высшего порядка_.

## Смотрите также

- [Функции первого класса](https://ru.wikipedia.org/wiki/Функции_первого_класса) на Википедии
- [Глоссарий](/ru/docs/Glossary)
- {{glossary("Variable", "Переменная")}}
- {{glossary("Function", "Функция")}}
- {{glossary("Callback function", "Колбэк-функция")}}