Top Banner
THE IDEAS OF CLOJURE JCConf 2015/12/04 Randy Lien Things I learn from Clojure
55

The Ideas of Clojure - Things I learn from Clojure

Jan 18, 2017

Download

Technology

Hsuan Fu Lien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Ideas of Clojure - Things I learn from Clojure

THE IDEAS OF CLOJURE

JCConf 2015/12/04

Randy Lien

Things I learn from Clojure

Page 2: The Ideas of Clojure - Things I learn from Clojure

About me@randylien

UI Engineer

#WebAppsRocks

#JavaScriptIsNotSoJavaScript

#WhenIsNextReactJS.TwMeetup

#clojurians.tw@facebook

Page 3: The Ideas of Clojure - Things I learn from Clojure

Survey!

• Heard Clojure?

• Clojure developer?

• Enjoy Java development?

Page 4: The Ideas of Clojure - Things I learn from Clojure

“I don’t know Java.”

– Speaker

Page 5: The Ideas of Clojure - Things I learn from Clojure
Page 7: The Ideas of Clojure - Things I learn from Clojure

LISP

Page 8: The Ideas of Clojure - Things I learn from Clojure

Clojure ?

Page 9: The Ideas of Clojure - Things I learn from Clojure

React.js Conf 2015

Page 10: The Ideas of Clojure - Things I learn from Clojure

Tapestry Dude - https://goo.gl/R5m3am (CC BY-SA 2.0)

The Creator of ClojureRich Hickey

Page 11: The Ideas of Clojure - Things I learn from Clojure

"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/

Page 12: The Ideas of Clojure - Things I learn from Clojure

Few ideas I want to share

Page 13: The Ideas of Clojure - Things I learn from Clojure

Philosophy

Page 14: The Ideas of Clojure - Things I learn from Clojure

Philosophy

Focus

Simplicity

Empowerment

Pure functions

Expressive Practical

ClarityConsistency

Separation of

concernsConcise

Direct Interop

- The Joy of Clojure

Page 15: The Ideas of Clojure - Things I learn from Clojure

Philosophy - Simplicity

• Pure functions

• Immutable

• Simple abstractions

• defprotocol

• deftype

Page 16: The Ideas of Clojure - Things I learn from Clojure

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

Page 17: The Ideas of Clojure - Things I learn from Clojure

Philosophy - Empowerment

• Use Java Virtual Machine

• Java is mature and has many libraries

• JavaScript is everywhere (ClojureScript)

Page 18: The Ideas of Clojure - Things I learn from Clojure

Consistency

Page 19: The Ideas of Clojure - Things I learn from Clojure

Syntax does matter

Page 20: The Ideas of Clojure - Things I learn from Clojure

Java + Python + JavaScript ?

Page 21: The Ideas of Clojure - Things I learn from Clojure

JaPythonScript?

Page 22: The Ideas of Clojure - Things I learn from Clojure

Data Types

• Integers - 123

• Doubles - 1.23

• Ratios - 1/23

• Strings - "JCConf"

• "Double Quotes Only"

• Characters - \J \C

Page 23: The Ideas of Clojure - Things I learn from Clojure

Data Types (cont.)

• Symbols - bar

• Keywords - :foo

• Booleans - true false

• Null - nil

• Regex - #"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]+"

Page 24: The Ideas of Clojure - Things I learn from Clojure

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

Page 25: The Ideas of Clojure - Things I learn from Clojure

function definition

Page 26: The Ideas of Clojure - Things I learn from Clojure

function definition

doc string

Page 27: The Ideas of Clojure - Things I learn from Clojure

Clojure

• (+ 1 2)

• (+ 1 2 3)

• (into [] 2)

General

• 1 + 2

• 1 + 2 + 3

• [].push(2)

Page 28: The Ideas of Clojure - Things I learn from Clojure
Page 29: The Ideas of Clojure - Things I learn from Clojure

Use host libraries - Java

Page 30: The Ideas of Clojure - Things I learn from Clojure

Use host libraries - JavaScript

Page 31: The Ideas of Clojure - Things I learn from Clojure

DEMO

Page 32: The Ideas of Clojure - Things I learn from Clojure

functions & composition

Page 33: The Ideas of Clojure - Things I learn from Clojure

functions & composition

• map, reduce, filter

• partial, comp

• iterate

• repeat, repeatedly

• Many built-in functions and you don’t need to create. Just compose it!

Page 34: The Ideas of Clojure - Things I learn from Clojure

DEMO

Page 35: The Ideas of Clojure - Things I learn from Clojure

Values

Page 36: The Ideas of Clojure - Things I learn from Clojure

Values should be…

• Value!

• operated by functions

• time-relative

• Immutable

Page 37: The Ideas of Clojure - Things I learn from Clojure

Why Immutable?

Page 38: The Ideas of Clojure - Things I learn from Clojure

Why mutable?

Page 39: The Ideas of Clojure - Things I learn from Clojure

Why mutable?

• Limitations of early computers: Small RAM and disk

• New information replaces old

Page 40: The Ideas of Clojure - Things I learn from Clojure

Why immutable?

• No resource limitation

• Persistent data structure

• Record - Share the same data

• Key to do functional programming

• No side effect

• atom is mutable

Page 41: The Ideas of Clojure - Things I learn from Clojure

REPL Driven Development

Page 42: The Ideas of Clojure - Things I learn from Clojure

REPL ?

• Read–Eval–Print Loop

• nREPL (network REPL)

• Good for doing TDD

• clojure.test

• ClojureScript - Browser can connect to nREPL

Page 43: The Ideas of Clojure - Things I learn from Clojure

REPL

DEMO - ClojureScript

Page 44: The Ideas of Clojure - Things I learn from Clojure

REPL

DEMO - Clojure

Page 45: The Ideas of Clojure - Things I learn from Clojure

Tooling Eco-system

Page 46: The Ideas of Clojure - Things I learn from Clojure

Clojars

emacs

LightTable

Page 47: The Ideas of Clojure - Things I learn from Clojure

Leiningen

Page 48: The Ideas of Clojure - Things I learn from Clojure

Summary

Page 49: The Ideas of Clojure - Things I learn from Clojure

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

Page 50: The Ideas of Clojure - Things I learn from Clojure

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

Page 51: The Ideas of Clojure - Things I learn from Clojure

If you want to know more…

• Living Clojure

• The Joy of Clojure

• ClojureScript Unraveled

• Clojure Applied

• Clojure for the Brave and True

Page 52: The Ideas of Clojure - Things I learn from Clojure

Online resource

• http://www.tryclj.com/

• http://www.4clojure.com/

Page 53: The Ideas of Clojure - Things I learn from Clojure
Page 54: The Ideas of Clojure - Things I learn from Clojure

Worth to watch

• Simple Made Easy

• Clojure Made Simple

• The Value of Values

• The Language of the System

Page 55: The Ideas of Clojure - Things I learn from Clojure

Thanks