Clojure:
Рефакторинг
Як робити:
Рефакторинг в Clojure—завдяки його чистому синтаксису та функціональному парадигму—може бути надзвичайно прямолінійним. Спробуємо розібратися на поширеному прикладі: ітерація по колекціях. Ви могли почати з циклу for
, ось так:
(defn calculate-sum [numbers]
(reduce + 0 numbers))
(defn old-way []
(let [nums (range 1 11)]
(calculate-sum nums)))
Виклик (old-way)
дасть нам 55, суму від 1 до 10. Але, гей, ми можемо рефакторити це, щоб було більш Clojure-еским:
(defn new-way []
(->> (range 1 11)
(reduce +)))
Ця рефакторена функція (new-way)
використовує макроси потоку для прямої передачі діапазону в reduce
, зрізаючи зайве.
Поглиблений Розгляд
Мистецтво рефакторингу має свої корені в ранні дні розробки програмного забезпечення, але дійсно набуло популярності з книгою Мартіна Фаулера “Refactoring: Improving the Design of Existing Code”, яка була опублікована в 1999 році. В Clojure, рефакторинг часто спирається на принципи функціонального програмування, віддаючи перевагу чистим функціям і незмінним структурам даних.
Альтернативами ручному рефакторингу в Clojure можуть бути такі інструменти, як Cursive, популярний плагін для IntelliJ IDEA, який пропонує автоматизовані рефакторинги спеціально для Clojure. Також є clj-refactor, пакет для Emacs для Clojure, що надає набір функцій для рефакторингу.
Однією з особливих викликів рефакторингу в Clojure є робота зі станом та побічними ефектами в принципово незмінному і вільному від побічних ефектів парадигмі. Ретельне використання атомів, refs, агентів та транзієнтів є вирішальним для збереження як продуктивності, так і правильності під час рефакторингу.
Див. також
- “Refactoring: Improving the Design of Existing Code” Мартіна Фаулера для основоположних концептів.
- Clojure Docs для конкретних прикладів ідіоматичного Clojure коду.
- clj-refactor для автоматизації рефакторингу в Emacs.
- Cursive для користувачів IntelliJ, які шукають автоматизовану допомогу в рефакторингу.
- Рефакторинг з Річем Гіккі - Доповідь творця Clojure, яка, хоча і не про рефакторинг власне, надає розуміння філософії Clojure, яка може керувати ефективними рішеннями рефакторингу.