0Pricing
TypeScript Academy · Урок

Зачем нужны системы эффектов

Делайте побочные эффекты и сбои явными и пригодными для композиции

«Зачем нужны системы эффектов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Почему важны системы эффектов

Система эффектов делает побочные эффекты, сбои и зависимости явными и компонуемыми в системе типов. Вместо скрытых исключений и неявного ввода-вывода каждый эффект является значением, которое можно передавать, преобразовывать и объединять.

Проблемы обычных async/throw

Обычные async/await с throw скрывают важную информацию: сигнатура функции не сообщает, какие ошибки она может выбросить и какие ресурсы ей нужны.

async function getUser(id: number): Promise<User> {
  // may throw NotFoundError, may throw NetworkError
  // needs a database connection from... somewhere
  // none of this is in the type
  return await db.users.find(id);
}

Ошибки невидимы

Promise<User> ничего не сообщает о возможных сбоях. Вызывающая сторона не знает, какие ошибки нужно обработать, поэтому либо перехватывает слишком много, либо полностью забывает о некоторых случаях.

Зависимости неявны

Приведённая выше функция незаметно зависит от базы данных. Эта зависимость берётся из глобальной области или импорта, что затрудняет тестирование и замену, а также скрывает настоящий контракт.

Что такое значение эффекта

Эффект — это описание вычисления, а не само вычисление. Его создание ничего не выполняет; запустить его можно позже. Благодаря этому эффекты становятся чистыми значениями, которые можно компоновать как данные.

import { Effect } from "effect";

// A description: produces number, no errors, no requirements
const program = Effect.succeed(42);
// Nothing has run yet.

Явные сбои

Эффекты содержат возможные ошибки в типе, поэтому компилятор заставляет Вас осознанно обработать их или передать дальше.

import { Effect } from "effect";

const risky = Effect.fail(new Error("boom"));
// type encodes that this can fail with Error

Явные зависимости

Эффекты также отслеживают необходимые службы в своём типе. Вычисление, которому нужна Database, явно сообщает об этом и не может быть запущено, пока такая служба не будет предоставлена.

Композиция

Поскольку эффекты являются значениями, Вы объединяете их с помощью операторов (map, flatMap, zip) так же, как массивы или промисы, но каналы ошибок и зависимостей передаются автоматически.

Отложенное выполнение

Ничего не происходит, пока Вы явно не запустите эффект, например с помощью Effect.runPromise. Это разделение описания и выполнения позволяет выполнять повторы, прерывать операции и тестировать код без повторного запуска побочных эффектов.

import { Effect } from "effect";

const program = Effect.succeed(1);
// Run at the edge of your app:
// const result = await Effect.runPromise(program);

Сравнение с промисами

Promise выполняется немедленно, не типизирует ошибки и не учитывает зависимости. Effect ленив, типизирует ошибки и учитывает зависимости, то есть содержит существенно больше информации.

Почему это важно

Явное представление эффектов, ошибок и зависимостей позволяет компилятору обеспечивать корректную обработку, делает код тестируемым благодаря замене зависимостей и обеспечивает надёжную композицию сложных асинхронных потоков — именно это лежит в основе библиотек, подобных Effect-TS.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли важность систем эффектов.

Итоги

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

Часто задаваемые вопросы

Урок «Зачем нужны системы эффектов» бесплатный?

Да — полный текст урока «Зачем нужны системы эффектов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужны системы эффектов»?

Делайте побочные эффекты и сбои явными и пригодными для композиции Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужны системы эффектов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны системы эффектов
  2. Тип Effect
  3. Композиция эффектов
  4. Каналы ошибок и зависимости
← Назад к TypeScript Academy