Function
Function
Технический фундамент функции как контракта
Функция в инженерной практике это контракт входа и выхода:
- входные параметры должны быть валидны и ожидаемы;
- выход должен быть предсказуемым для вызывающего кода;
- побочные эффекты стоит контролировать и изолировать;
- маленькие специализированные функции легче тестировать и переиспользовать.
Такой подход снижает связность и упрощает развитие системы.
Почему функция это ключ к управляемому коду
Функция в JavaScript - это переиспользуемый блок логики. Вместо копирования одинакового кода ты выносишь действие в функцию и вызываешь там, где нужно. Это уменьшает дублирование и делает поведение системы предсказуемым.
Ключевой момент: функция принимает вход (параметры), выполняет логику и возвращает результат.
Проверь себя: почему 5 одинаковых кусков кода хуже одной функции с параметрами?
Базовый синтаксис
function getStatus(score) {
if (score >= 70) return 'passed';
return 'retry';
}
console.log(getStatus(80)); // passed
Смотри, что важно: return завершает выполнение функции и отдает значение наружу.
Параметры и аргументы
- параметр - имя в определении функции;
- аргумент - реальное значение при вызове.
function greet(name) {
return `Привет, ${name}!`;
}
greet('Anna'); // 'Anna' - аргумент
Если аргумент не передан, параметр будет undefined.
Функция как значение
В JavaScript функция - объект первого класса. Ее можно хранить в переменной, передавать как аргумент, возвращать из другой функции.
const multiply = function (a, b) {
return a * b;
};
То же самое можно записать короче через стрелочную функцию:
const multiply2 = (a, b) => a * b;
Это важно для колбэков и построения гибких API.
Проверь себя: почему возможность передавать функцию в функцию делает код более выразительным?
Чистые и нечистые функции
Чистая функция зависит только от входа и не меняет внешнее состояние.
function sum(a, b) {
return a + b;
}
Нечистая функция может менять внешние данные или иметь побочные эффекты.
let counter = 0;
function inc() {
counter += 1;
}
Смотри, что важно: чистые функции проще тестировать и безопаснее рефакторить.
Мини-сценарий: валидатор шага
function validateStep(isAuth, score) {
if (!isAuth) return 'auth-error';
if (score >= 70) return 'passed';
return 'retry';
}
Такая функция упрощает логику интерфейса: входы ясны, выходы предсказуемы.
Частые ошибки новичков
- Забывать
returnи получатьundefined. - Писать функцию, которая делает слишком много разных задач.
- Изменять внешние данные без необходимости.
- Давать неочевидные имена (
doStuff,work).
Анти-провал: хорошее имя функции обычно отвечает на вопрос "что именно она делает" (getStatus, formatPrice, validateEmail).
Что будет, если изменить вход
В getStatus:
80->passed;70->passed;69->retry.
Если вместо числа придет строка, поведение зависит от приведения. Значит, на границе функции лучше валидировать тип входа.
Проверь себя: где логичнее делать проверку типа - внутри функции или до ее вызова?
Краткий итог
- Функция - базовый инструмент переиспользования логики в JavaScript.
- У функции есть входные параметры, тело выполнения и выход через
return. - Функции в JS - значения, поэтому их можно передавать и хранить.
- Чистые функции обычно проще поддерживать и тестировать.
- Четкие контракты функции (вход/выход) резко снижают количество ошибок.