Book Image

Learning ClojureScript

By : W. David Jarvis, Allen Rohner
Book Image

Learning ClojureScript

By: W. David Jarvis, Allen Rohner

Overview of this book

Clojure is an expressive language that makes it possible to easily tackle complex software development challenges. Its bias toward interactive development has made it a powerful tool, enabling high developer productivity. In this book, you will first learn how to construct an interactive development experience for ClojureScript.. You will be guided through ClojureScript language concepts, looking at the basics first, then being introduced to advanced concepts such as functional programming or macro writing. After that, we elaborate on the subject of single page web applications, showcasing how to build a simple one, then covering different possible enhancements. We move on to study more advanced ClojureScript concepts, where you will be shown how to address some complex algorithmic cases. Finally, you'll learn about optional type-checking for your programs, how you can write portable code, test it, and put the advanced compilation mode of the Google Closure Compiler to good use.
Table of Contents (15 chapters)
Learning ClojureScript
Credits
Foreword
About the Authors
About the Reviewer
www.PacktPub.com
Preface

Control flow


At this point, we've already seen many examples of ClojureScript functions and their associated control flows, but we haven't really covered them in explicit detail. In this section, we'll look at various branching control flow special forms and macros, and we'll cover how to handle exceptions.

if and when

Like almost every programming language, ClojureScript uses if for basic conditional logic. if in ClojureScript is a special form rather than a function or a macro. Syntactically, if takes a predicate, a form that is evaluated and yielded if the predicate returns true, and an optional form that is evaluated and yielded if the predicate returns false. If the optional form for the false case is not supplied, it defaults to nil:

cljs.user=> (if (= 1 1)
  "One equals one!"
  "One does not equal one :(")
;; => "One equals one!"
cljs.user=> (if (= 1 2)
  "One equals two!") ;; implicit nil return value when false
;; => nil

when like a combination of if and an implicit do...