Clojure:
Организация кода в функции

Как это делать:

Функции в Clojure определяются с помощью defn, после чего следует имя, параметры и тело функции. Вот быстрый пример.

(defn greet [name]
  (str "Привет, " name "!"))

(greet "Алекс") ; => "Привет, Алекс!"

Допустим, теперь мы хотим вычислить площадь прямоугольника. Вместо того чтобы смешивать все вместе, мы разделим это на две функции:

(defn area [length width]
  (* length width))

(defn print-area [length width]
  (println "Площадь равна:" (area length width)))

(print-area 3 4) ; => Площадь равна: 12

Глубокое погружение

Когда-то давно программисты просто вставляли всю свою логику в один большой блок. Это было уродливо. Затем пришло структурное программирование, и функции стали чем-то обыденным. В Clojure каждая функция является объектом первого класса — вы можете манипулировать ими как любым другим значением.

Альтернативы? Некоторые могут возиться с мультиметодами или функциями высшего порядка, но это всего лишь приправы в бульоне функций.

Все в деталях функции: в Clojure они неизменяемы, что делает путаницу с побочными эффектами менее вероятной. Они сильно опираются на рекурсию вместо типичных циклов, что хорошо сочетается с функциональными парадигмами языка.

Смотрите также