KEMBAR78
The Ideas of Clojure - Things I learn from Clojure | PDF
THE IDEAS OF CLOJURE
JCConf 2015/12/04
Randy Lien
Things I learn from Clojure
About me
@randylien
UI Engineer
#WebAppsRocks
#JavaScriptIsNotSoJavaScript
#WhenIsNextReactJS.TwMeetup
#clojurians.tw@facebook
Survey!
• Heard Clojure?
• Clojure developer?
• Enjoy Java development?
“I don’t know Java.”
– Speaker
History of programming languages
LISP
Clojure ?
React.js Conf 2015
Tapestry Dude - https://goo.gl/R5m3am (CC BY-SA 2.0)
The Creator of Clojure

Rich Hickey
"Hickey is the new Messiah of software development. Watch
and listen to his talks, and you will understand."
– http://bepsays.com/2014/07/08/how-rich-is-rich-hickey/
Few ideas I want to share
Philosophy
Philosophy
Focus
Simplicity
Empowerment
Pure functions
Expressive Practical
Clarity

Consistency
Separation 

of 

concerns
Concise
Direct
Interop
- The Joy of Clojure
Philosophy - Simplicity
• Pure functions
• Immutable
• Simple abstractions
• defprotocol
• deftype
Philosophy - Focus
• Syntax will not bother you
• Consistency
• Dynamic System
• Almost everything defined in Clojure can be
redefined (Even while program is running)
• Use Macro you can build anything you want to do
Philosophy - Empowerment
• Use Java Virtual Machine
• Java is mature and has many libraries
• JavaScript is everywhere (ClojureScript)
Consistency
Syntax does matter
Java + Python + JavaScript ?
JaPythonScript?
Data Types
• Integers - 123
• Doubles - 1.23
• Ratios - 1/23
• Strings - "JCConf"
• "Double Quotes Only"
• Characters - J C
Data Types (cont.)
• Symbols - bar
• Keywords - :foo
• Booleans - true false
• Null - nil
• Regex - #"[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]+"
Data Structure
• Lists - (1 2 3)
• Prepend
• Vectors - [1 2 3]
• Zero indexed. Append
• Maps - {:a 1, :b 2, :c "3"}
• Key-value pair
• Comma will be ignored
• Sets - #{1 2 3}
• Unique. Unordered
function definition
function definition
doc string
Clojure
• (+ 1 2)
• (+ 1 2 3)
• (into [] 2)
General
• 1 + 2
• 1 + 2 + 3
• [].push(2)
Use host libraries - Java
Use host libraries - JavaScript
DEMO
functions & composition
functions & composition
• map, reduce, filter
• partial, comp
• iterate
• repeat, repeatedly
• Many built-in functions and you don’t need to create.

Just compose it!
DEMO
Values
Values should be…
• Value!
• operated by functions
• time-relative
• Immutable
Why Immutable?
Why mutable?
Why mutable?
• Limitations of early computers: Small RAM and disk
• New information replaces old
Why
immutable?
• No resource limitation
• Persistent data structure
• Record - Share the same data
• Key to do functional programming
• No side effect
• atom is mutable
REPL Driven Development
REPL ?
• Read–Eval–Print Loop
• nREPL (network REPL)
• Good for doing TDD
• clojure.test
• ClojureScript - Browser can connect to nREPL
REPL
DEMO - ClojureScript
REPL
DEMO - Clojure
Tooling Eco-system
Clojars
emacs
LightTable
Leiningen
Summary
Summary
• Clojure is a practical functional programming language
• Java and JavaScript are two major languages and
Clojure and ClojureScript can run on them
• Using REPL in your TDD practices would be helpful
• Pure functions and Immutable data structure can make
your system stable and easy to reason about
Summary (cont.)
• Clojure has much better tooling and keep improving it
• ClojureScript is hotter than Clojure!
• Many companies are using Clojure
• booking.com, Yahoo, Puppet, Walmart, twitter,
heroku, nubank…etc
• STM, transducer, core.asyn
If you want to know more…
• Living Clojure
• The Joy of Clojure
• ClojureScript Unraveled
• Clojure Applied
• Clojure for the Brave and True
Online resource
• http://www.tryclj.com/
• http://www.4clojure.com/
Worth to watch
• Simple Made Easy
• Clojure Made Simple
• The Value of Values
• The Language of the System
Thanks

The Ideas of Clojure - Things I learn from Clojure