Book Image

Clojure for Java Developers

Book Image

Clojure for Java Developers

Overview of this book

We have reached a point where machines are not getting much faster, software projects need to be delivered quickly, and high quality in software is more demanding as ever. We need to explore new ways of writing software that helps achieve those goals. Clojure offers a new possibility of writing high quality, multi-core software faster than ever, without having to leave your current platform. Clojure for Java developers aims at unleashing the true potential of the Clojure language to use it in your projects. The book begins with the installation and setup of the Clojure environment before moving on to explore the language in-depth. Get acquainted with its various features such as functional programming, concurrency, etc. with the help of example projects. Additionally, you will also, learn how the tooling works, and how it interacts with the Java environment. By the end of this book, you will have a firm grip on Clojure and its features, and use them effectively to write more robust programs.
Table of Contents (14 chapters)
Clojure for Java Developers
Credits
About the Author
About the Reviewer
www.PacktPub.com
Preface
Index

Macros in the real world


Do you want to know when it is that macros are used extensively? Think about defn; what's more, do this:

(macroexpand-1 '(defn sample [a] (println a)))

;; (def sample (clojure.core/fn ([a] (println a))))

Did you know that defn is a macro in clojure.core that creates a function and binds it to a var in the current namespace?

Clojure is filled with macros; if you want some samples, you can look at Clojure core, but what else can you do with macros?

Let's have a look at some interesting libraries:

  • yesql: The yesql library is a very interesting sample of code generation. It reads SQL code from a SQL file and generates the Clojure functions accordingly. Look for the defquery and defqueries macros in the yesql project on GitHub; it can be very enlightening.

  • core.async: If you are familiar with the go language and goroutines, you would probably like to have that same functionality in the Clojure language. This isn't necessary since you could have provided them yourself! The...