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, яка може керувати ефективними рішеннями рефакторингу.