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 - значения, поэтому их можно передавать и хранить.
  • Чистые функции обычно проще поддерживать и тестировать.
  • Четкие контракты функции (вход/выход) резко снижают количество ошибок.