Функциональный фронтенд. ClojureScript — Часть 1 из 5

Опубликовано: 21 Май 2026
на канале: Московский клуб программистов
1,472
53

Исходный код проекта: https://github.com/astynax/cljs-pokedex
Алексей Пирогов на getmentor: https://getmentor.dev/mentor/aleksei-...

00:00 - заставка
04:50 - начало - вводное слово от Марка
06:45 - вводная от Алексея про Clojure и ClojureScript
13:55 - про PokeAPI и что планируется сделать
16:40 - про blocks.css
17:23 - как это используется? - про REPL и интероп с js
20:20 - React и обёртка rum
23:45 - про стейт
27:05 - добавляем счётчик
31:27 - натягиваем стили
34:25 - переходим к API
38:45 - добавляем кэш покемонов
41:00 - пишем fetch - функция, достающая список по адресу и обновляющая кэш
45:45 - вызвали fetch
49:25 - фетчим всех
53:25 - начинаем выводить на страницу
55:25 - вывели список всех имён
55:55 - ограничили список, теперь хотим сделать роутинг, чтобы в них проваливаться
58:40 - вопросы из зала
58:50 - почему не elm?
59:50 - какие есть ide?
1:01:05 - вопрос про кэш
1:01:45 - вопрос про структуру проекта
1:04:20 - зачем это всё нужно и в чём прикол?
1:08:50 - вернулись к приложению
1:14:00 - разобрались с case и снова видим список, но теперь уже готовы делать другие типы страниц в этом простеньком роутинге
1:14:50 - сделали имена ссылками (пока вникуда)
1:19:15 - заработали ссылки на страницы покемонов (пока пустые) и ссылка обратно к списку
1:29:45 - нарисовали картинку на карточке покемона
1:30:30 - ещё вопрос из зала: почему rum? вылился в большое обсуждение на тему плюсов стабильных и простых библиотек
1:36:25 - уточняющий вопрос: а не смотрел ли Алексей на ulx? (не смотрел)
1:37:50 - вопрос от Марка: что за символ "лямбда" коде?
1:40:50 - вопрос из зала: будет ли DataScritp? (да)
1:41:00 - закончили. пара слов от Марка в завершение
1:42:20 - трансляция завершена. заставка

На JavaScript можно писать функционально — это не секрет. Язык поддерживает разные парадигмы, и программист волен выбирать между процедурным, объектным и функциональным решением задачи. Кажется, что парадигмы языка совершенно равноправны, но это не так. Синтаксис JavaScript — старый добрый процедурный C, приправленный объектными украшениями, какие мы видели в C++ и Java. Писать на JavaScript процедурный и объектно-ориентированный код — привычнее, идиоматичнее и проще, чем функциональный.

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

Лет десять с лишним существует язык Clojure, который "живёт" на сервере, где запускается на Java Virtual Machine, а в браузере запускается его более молодое подмножество — ClojureScript. Это тот самый "functional first" язык, где вы практически везде используете чистые функции и неизменяемые структуры данных удовольствия ради и дела для.

Алексей Пирогов, наш бессменный докладчик и организатор встреч, сделает серию воркшопов, где вживую покажет, как выглядит разработка на ClojureScript.
Реализуем работающий в браузере "Pokedex" — базу знаний о… покемонах! Данные будем получать из PokéAPI (https://pokeapi.co/), кэшировать в Localstorage и показывать по ним выборки в GUI. А может быть даже положим данные в DataScript (https://github.com/tonsky/datascript) — это такая in-memory БД, запросы к которой пишутся на языке логического программирования Datalog (https://docs.racket-lang.org/datalog/) (который является DSL для Clojure, конечно же).

Первый воркшоп пройдёт 16 февраля с 19:00 до 20:30.

В организации нам помогает наш партнёр SBTG.RU (https://sbtg.ru/) — трансляции в любых конфигурациях под ключ.

Чтобы быть в курсе IT-событий, подпишитесь на телеграм-канал ITMeeting (https://itmeeting.ru/) — наших друзей, которые анонсируют бесплатные мероприятия в Москве и Онлайне. Здесь вы найдёте и конференции, и митапы, и семинары — форматы на любой вкус. Канал анонсирует и наши встречи. Подписывайтесь.

TG (чат) https://t.me/progmsk | TG (канал) https://t.me/progmsk_channel | VK https://vk.com/progmsk | YT    / @progmsk