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

Writing your first macro


Now that you have a clear understanding of how macros work and what they are for, let's start working with Clojure.

Let me present you with a challenge: write an unless function in Clojure, something that works like this:

(def a 150)

(my-if (> a 200)
  (println"Bigger than 200")
  (println"Smaller than 200"))

Let's give it a first try; maybe with something like the following syntax:

(defn my-if [cond positive negative]
  (if cond
    positive
    negative))

Do you know what would happen if you wrote this code and then ran it? If you test it, you will get the following result:

Bigger than 200
Smaller than 200
Nil

What's happening here? Let's modify it a bit so that we get a value and we can understand what's happening. Let's define it a bit differently, and let's return a value so that we see something different:

      (def a 500)
(my-if (> a 200)
  (do
    (println"Bigger than 200")
    :bigger)
  (do
    (println"Smaller than 200")
    :smaller))

We will get the following...