Как можно сохранить функцию в массиве?

Как можно обеспечить выполнение функции, которая хранится в элементе массива при обращении к этому элементу?
  • 24 января 2024 г. 17:30
Ответы на вопрос 2
В различных языках программирования существуют разные подходы для работы с функциями как с объектами первого класса, которые можно сохранять в переменных, передавать в качестве аргументов и возвращать из других функций. Ниже я расскажу о том, как сохранить функцию в массиве и вызвать её на примере JavaScript.

Для того чтобы сохранить функцию в массиве в JavaScript, нужно сначала определить саму функцию, а затем добавить её в массив. Здесь функция ведёт себя как любая другая переменная:

```javascript
// Определим функцию
function hello() {
  console.log("Hello, World!");
}

// Сохраняем функцию в массив
var functionsArray = [hello, function() { console.log("Another function"); }];

// Вызываем функцию, которая хранится в первом элементе массива
functionsArray[0](); // Выведет: Hello, World!

// Вызываем функцию, которая хранится во втором элементе массива
functionsArray[1](); // Выведет: Another function
```

Также можно сохранять анонимные функции или лямбда-выражения (стрелочные функции) непосредственно в массиве:

```javascript
var functionsArray = [
  function() { console.log("Function 1"); },
  () => { console.log("Function 2"); }
];

// Вызываем обе функции
functionsArray[0](); // Вызов первой функции
functionsArray[1](); // Вызов второй функции
```

Чтобы обеспечить выполнение функции при каждом обращении к элементу массива, можно использовать функции доступа (геттеры), но это немного сложнее и зависит от того, в каком смысле вы хотите "при обращении к элементу массива". Если вы имеете в виду ленивое выполнение, то можно обернуть вызов функции в другую функцию и выполнить её:

```javascript
var functionsArray = [
  () => { return function() { console.log("Function 1"); } },
  () => { return () => { console.log("Function 2"); } }
];

functionsArray[0]()(); // Вызывает возвращаемую функцию из функции в первом элементе
functionsArray[1]()(); // Вызывает возвращаемую функцию из функции во втором элементе
```

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

В других языках программирования, таких как Python, функции также можно сохранять в списках (аналог массивов) и затем вызывать их:

```python
# Определяем список функций
functions_list = [
    lambda: print("Hello, World!"),
    lambda: print("Another function")
]

# Вызываем функцию из списка
functions_list[0]()  # Печатает "Hello, World!"
functions_list[1]()  # Печатает "Another function"
```

В каждом языке программирования могут быть свои инструменты и специфические особенности реализации, но общий принцип сохранения функций в структурах данных и их вызова сохраняется.
Всё в документации: Обращение к функциям через переменные ("Variable functions" на англ.)
Похожие вопросы