Вступ
Чому ми це робимо? Тому що Clojure рулить, а JavaScript сягає усюди.
— Річ Хікі (Rich Hickey)
ClojureScript — це імплементація мови програмування Clojure, орієнтована на JavaScript. Завдяки цьому, вона може працювати в багатьох різних середовищах виконання, включаючи веб-браузери, Node.js, io.js та Nashorn.
На відміну від інших мов, які призначені компілюватися в JavaScript (такі, як TypeScript, FunScript або CoffeScript), ClojureScript створена використовувати JavaScript як байткод. Це дуже надійна та безпечна мова, що заохочує до функціонального програмування. Її семантика істотно відрізняється від JavaScript.
Ще однією великою відмінністю (і, на нашу думку, перевагою) від інших мов є те, що Clojure призначена бути гостьовою мовою. Це мова без власної віртуальної машини, яка може бути легко адаптована до нюансів середовища виконання. Перевагою для Clojure (а, отже, і для ClojureScript) є те, що вона має доступ до всіх існуючих бібліотек, написаних на батьківській мові.
Перед тим, як ми розпочнемо, давайте підсумуємо деякі з основних ідей в ClojureScript. Не переймайтеся, якщо ви не розумієте їх зараз — по ходу книги вони стануть більш зрозумілі.
- ClojureScript нав'язує парадигму функціонального програмування з її ідеями та ідіомами. Але хоч вона і підтримує функціональне програмування, в ній все ж більше прагматизму, ніж бажання переслідувати теоретичну чистоту;
- заохочує до використання незмінних даних в програмуванні та пропонує високоефективні та розвинені імплементації незмінних колекцій;
- встановлює чітку відмінність ідентичності від її стану, надаючи явні конструкції для керування зміною стану в вигляді послідовності незмінних значень створених з плином часу;
- вона має поліморфізм на основі типів і значень, що елегантно вирішує проблему вираження;
- це діалект Lisp, тому програми написані структурами даних самої мови. Ця властивість відома як гомоіконність, що робить метапрограмування (програми, які пишуть програми) дуже простим;
Разом ці ідеї дуже впливають на те, як ви проектуєте та розробляєте програмне забезпечення, навіть якщо ви не використовуєте ClojureScript. Функціональне програмування, роз'єднуюче дані (що є незмінними) від перетворюючих їх операцій, явні ідіоми для керування зміною, що відбувається з плином часу та поліморфні конструкції для програмування абстракцій значно спрощують системи, що ми пишемо.
Ми можемо робити точно таке ж програмне забезпечення, що ми робимо сьогодні, використовуючи значно простіші речі: значно простіші мови, інструменти, методи, підходи.
— Річ Хікі (Rich Hickey)
Ми сподіваємося, що вам сподобається книга і ClojureScript принесе таку ж радість і натхнення, яку принесла й нам.