Clojure’s approach to data is significantly different than other popular languages, and somewhat different even than its Lisp heritage. On one hand, Clojure provides a small core set of immutable, persistent data structures. On the other, Clojure uses functional programming to provide a rich set of data manipulation functions. These two pillars of Clojure are fused together through the “sequence” abstraction. Because of sequences, Clojure developers expect that almost any function works with almost any composite data. This is a radically different approach than we see in popular OO languages like Java.
This talk will examine Clojure’s approach to both data and function and explore how sequences are the linchpin abstraction between them. We will consider how Clojure’s approach to data differs from object-oriented programming (particularly Java) and see how this approach changes the nature of your daily programming. We will also consider topics such as mutation, state vs value, and how to customize your primitive and composite data. You should leave this talk with new ways to think about the intersection of data and function in your program.
This talk is based on work in a large Clojure code base (70k+ lines) developed over three years at Revelytix. We have built several products in Clojure and have found the focus on the power of immutable data to be a significant asset in helping us build and evolve our code.