One of the confusing aspects of Clojure is that although it aims at being a functional programming language, it does also provide “object-oriented” features (gasp). This is similar to other programming languages, such as Scala ,1 which also provides both FP and OOP syntax.
When to use OOP in Clojure is a tricky discussion point and depends on the requirements of the project you’re working on, and so we won’t make any opinionated statements on that topic. Although, I will say, for me personally I like the structural aspect of some of the items we’ll be looking at shortly, and it can also be ...