Skip to content

Commit

Permalink
feat(ru): update translation of "First-class function" in Glossary (#…
Browse files Browse the repository at this point in the history
…16722)

Co-authored-by: Sasha Sushko <[email protected]>
  • Loading branch information
leon-win and sashasushko authored Oct 30, 2023
1 parent 6beee95 commit ff161af
Showing 1 changed file with 58 additions and 10 deletions.
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", "Колбэк-функция")}}

0 comments on commit ff161af

Please sign in to comment.