14. Функции JavaScript

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

Функции в JavaScript

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

1. Объявление функции

Функцию можно объявить несколькими способами:

1.1. Функциональное объявление (Function Declaration):
function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Alice"));  // Hello, Alice!
1.2. Функциональное выражение (Function Expression):
const greet = function (name) {
    return `Hello, ${name}!`;
};

console.log(greet("Bob"));  // Hello, Bob!
1.3. Стрелочная функция (Arrow Function):
const greet = (name) => `Hello, ${name}!`;

console.log(greet("Charlie"));  // Hello, Charlie!

2. Аргументы функции

Функция может принимать один или несколько аргументов. Если аргументы не переданы, их значение будет undefined.

function sum(a, b) {
    return a + b;
}

console.log(sum(5, 3));  // 8
console.log(sum(5));     // NaN (undefined + 5)
Аргументы по умолчанию:
function sum(a = 0, b = 0) {
    return a + b;
}

console.log(sum(5));  // 5 (5 + 0)
Использование arguments:

Функции имеют встроенный объект arguments, который содержит все переданные аргументы.

function showArgs() {
    return arguments[0] + arguments[1];
}

console.log(showArgs(3, 7));  // 10

3. Возврат значения

Функции могут возвращать значения с помощью return.

function square(num) {
    return num * num;
}

console.log(square(4));  // 16

Если return отсутствует, функция возвращает undefined.

4. Рекурсия

Функции могут вызывать сами себя.

function factorial(n) {
    if (n === 0) return 1;
    return n * factorial(n - 1);
}

console.log(factorial(5));  // 120

Методы в JavaScript

Методы — это функции, которые принадлежат объекту и вызываются через него. Методы используются для работы с объектами, массивами, строками и другими структурами.

1. Методы объекта

Метод — это просто функция, добавленная в объект.

const user = {
    name: "Alice",
    greet() {
        return `Hello, ${this.name}!`;
    },
};

console.log(user.greet());  // Hello, Alice!

Ключевое слово this в методе ссылается на текущий объект.

2. Методы массивов

Массивы имеют встроенные методы для работы с данными.

Примеры методов массивов:

const numbers = [1, 2, 3, 4, 5];

// forEach
numbers.forEach(num => console.log(num));  // 1 2 3 4 5

// map
const squares = numbers.map(num => num * num);
console.log(squares);  // [1, 4, 9, 16, 25]

// filter
const evens = numbers.filter(num => num % 2 === 0);
console.log(evens);  // [2, 4]

// reduce
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum);  // 15

3. Методы строк

Строки в JavaScript имеют множество встроенных методов для работы с текстом.

Примеры методов строк:
const text = "Hello, JavaScript!";

// length
console.log(text.length);  // 18

// toUpperCase и toLowerCase
console.log(text.toUpperCase());  // HELLO, JAVASCRIPT!
console.log(text.toLowerCase());  // hello, javascript!

// slice
console.log(text.slice(7, 17));  // JavaScript

// includes
console.log(text.includes("Java"));  // true

// replace
console.log(text.replace("JavaScript", "World"));  // Hello, World!

4. Методы работы с объектами

Объекты также имеют встроенные методы.

Примеры:
const user = { name: "Alice", age: 25 };

// Object.keys
console.log(Object.keys(user));  // ['name', 'age']

// Object.values
console.log(Object.values(user));  // ['Alice', 25]

// Object.entries
console.log(Object.entries(user));  // [['name', 'Alice'], ['age', 25]]

Различия между функциями и методами

Функция Метод
Независима от объектов. Привязана к объекту.
Вызывается просто по имени (func()). Вызывается через объект (obj.method()).
Может быть использована где угодно. Используется для взаимодействия с объектом.

Заключение

Функции и методы являются основными строительными блоками в JavaScript, обеспечивая повторное использование кода, обработку данных и взаимодействие с объектами. Разница между ними в том, что методы всегда связаны с объектами, а функции — независимы.

Задание

  1. Выделить повторяющиеся части программы (например, расчет суммы, среднего, максимума и вывод результата) в отдельные функции.
  2. Создать универсальную функцию для обработки набора чисел (сумма, среднее, максимум) и вызовы этой функции для каждого набора.
  3. Упростить и структурировать код, сохраняя его функциональность.

    Программа с повторяющимся кодом:

// Получение первого набора чисел от пользователя
let input1 = prompt("Введите первый список чисел через запятую:");
let numbers1 = input1.split(",").map(num => parseFloat(num));
let sum1 = 0;
for (let i = 0; i < numbers1.length; i++) {
    sum1 += numbers1[i];
}
let avg1 = sum1 / numbers1.length;
let max1 = Math.max(...numbers1);
console.log("Первый набор:");
console.log("Сумма:", sum1);
console.log("Среднее:", avg1);
console.log("Максимум:", max1);

// Получение второго набора чисел от пользователя
let input2 = prompt("Введите второй список чисел через запятую:");
let numbers2 = input2.split(",").map(num => parseFloat(num));
let sum2 = 0;
for (let i = 0; i < numbers2.length; i++) {
    sum2 += numbers2[i];
}
let avg2 = sum2 / numbers2.length;
let max2 = Math.max(...numbers2);
console.log("Второй набор:");
console.log("Сумма:", sum2);
console.log("Среднее:", avg2);
console.log("Максимум:", max2);

// Получение третьего набора чисел от пользователя
let input3 = prompt("Введите третий список чисел через запятую:");
let numbers3 = input3.split(",").map(num => parseFloat(num));
let sum3 = 0;
for (let i = 0; i < numbers3.length; i++) {
    sum3 += numbers3[i];
}
let avg3 = sum3 / numbers3.length;
let max3 = Math.max(...numbers3);
console.log("Третий набор:");
console.log("Сумма:", sum3);
console.log("Среднее:", avg3);
console.log("Максимум:", max3);

Почему это полезно:

  1. Меньше повторений: Читабельность, оптимизация времени при разработки и отладки.
  2. Модульность: Повторное использование заготовленного блока, оптимизация расчётом - кеширование действий процессора, быстрая отладка.
  3. Практика рефакторинга: Ускорение работы и последующих обновлений.