раздел 28

Clojure

Clojure учит мыслить данными, а не объектами. Сначала база: REPL как способ работы, литералы, четыре коллекции и мапы вместо классов, деструктуризация, абстракция последовательности. Дальше функциональное ядро: функции и комбинаторы, ленивые последовательности, библиотека из десятков функций над данными, потоковые макросы, loop и recur. Состояние отдельно от значений: атом, ref и транзакционная память, агенты и future. Полиморфизм без наследования через мультиметоды и протоколы, макросы и их гигиена, EDN и схемы spec и malli на границе системы. Финал прикладной: интероп с хостом, core.async, babashka и тесты, HTTP-сервис на Ring, трансдьюсеры и разбор лога событий игры одним проходом. Живые сниппеты работают прямо в браузере на SCI.

32 урока32 тем · 10 кластеров

Начать раздел
Хочу пройти

Раздел открыт для всех. Войди, чтобы отмечать пройденные уроки, вести заметки и решать задачи в редакторе. войти

Уроки раздела

  1. Зачем ClojureJ~15 мин
  2. REPL как способ работыJ~20 мин
  3. Формы и литералыJ~15 мин
  4. Четыре коллекцииJ~20 мин
  5. Мапы как сущностиJ~15 мин
  6. Персистентность изнутриM~20 мин
  7. ДеструктуризацияJ~15 мин
  8. Абстракция последовательностиM~15 мин
  9. Функции: fn, арность, замыкания, partial и compJ~15 мин
  10. Ленивые последовательности: range, iterate, lazy-seq и чанкиM~15 мин
  11. Библиотека последовательностей: map, filter, reduce и ещё три десяткаM~15 мин
  12. Потоковые макросы: ->, ->>, some->, cond-> и as->J~15 мин
  13. Рекурсия: loop, recur и почему нет хвостовых вызововM~15 мин
  14. Значения и идентичность: модель времени ХикиM~15 мин
  15. Атом: swap!, reset!, валидаторы и наблюдателиM~20 мин
  16. Ref и STM: координированные измененияMS~30 мин
  17. Агенты, future, promise и delayMS~25 мин
  18. Мультиметоды и иерархии: правила бояM~15 мин
  19. Протоколы и записиM~15 мин
  20. Когда что: мапа, запись, протокол, мультиметодM~20 мин
  21. Код как данныеM~15 мин
  22. Гигиена макросовMS~15 мин
  23. DSL квестов: макрос и данныеMS~15 мин
  24. EDN и данные на границеM~20 мин
  25. Схемы: spec и malliM~20 мин
  26. Интероп с хостом: JVM и JavaScriptM~20 мин
  27. core.async: каналы и go-блокиMS~20 мин
  28. Babashka, ClojureScript и тестыM~20 мин
  29. HTTP-сервис на RingM~20 мин
  30. Трансдьюсеры: преобразование без промежуточных коллекцийMS~15 мин
  31. Алгопрактика на ClojureM~15 мин
  32. Сквозной проект: разбор events.logM~15 мин

Понятия курса

Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.

Старт

  • Зачем ClojureЛисп на чужом рантайме: JVM, JavaScript, babashka. Ставка на неизменяемые данные, функции поверх мап и состояние с явной семантикой.урок 1 · Зачем Clojureопираются: урок 2
  • Формы и литералыЧисла, строки, символы, ключевые слова, nil и истинность. Вызов это список, скобки читаются как дерево.урок 3 · Формы и литералыопираются: урок 4
  • REPL как способ работыclj и deps.edn, редактор, подключённый к REPL, вычисление формы под курсором. Программа растёт в живом процессе.урок 2 · REPL как способ работыопираются: урок 3

Данные

Функциональное ядро

Состояние

Полиморфизм

Макросы

  • Код как данныеПрограмма это списки и векторы, которые читает reader. quote останавливает вычисление, syntax-quote строит шаблон, macroexpand показывает подстановку.урок 21 · Код как данныеопираются: урок 22
  • Гигиена макросовЗахват символов и двойное вычисление аргумента. gensym и авто-gensym x#, почему syntax-quote квалифицирует символы и как это спасает.урок 22 · Гигиена макросовопираются: урок 23
  • DSL на макросах и на данныхЯзык квестов дважды: макросом defquest и простой мапой с интерпретатором. Первое правило макросов: не пиши макрос, если хватает данных.урок 23 · DSL квестов: макрос и данные

Данные как контракт

  • Схемы: spec и malliДинамический язык и проверка формы данных на границе. clojure.spec: s/def, s/keys, s/valid?, explain, генераторы. malli: схема как данные.урок 25 · Схемы: spec и malli
  • EDN и данные на границеEDN это литералы Clojure как формат обмена: мапы, векторы, множества, ключевые слова, теги #inst и #uuid. clojure.edn/read-string безопасен, read-string нет.урок 24 · EDN и данные на границеопираются: урок 25

Хост и экосистема

Практика

Финал

  • Алгопрактика на ClojureЗадачи с собеседований на неизменяемых структурах: частоты, два указателя без указателей, обход графа, динамика через reduce и мемоизацию.урок 31 · Алгопрактика на Clojure
  • Сквозной проект: разбор лога событийevents.log «Хроник Пограничья» разбирается пайплайном на трансдьюсерах: воронка, топ событий, сессии. Ответ сверяется с цифрами курса аналитика.урок 32 · Сквозной проект: разбор events.log