2014-11-01 03 Николай Линкер. open your clojure

19
Open your Clojure https://www.dropbox.com/s/5ge6pp bcgchc02v/clojure-nick.pdf Николай Линкер

Upload: -

Post on 12-Jul-2015

75 views

Category:

Software


1 download

TRANSCRIPT

Page 2: 2014-11-01 03 Николай Линкер. Open your clojure

Clojure - это

• Лисп

• Динамический строго типизированный

• Функциональный

• Под JVM

• Тёплое ламповое коммьюнити

Page 3: 2014-11-01 03 Николай Линкер. Open your clojure

Самый быстрый способ погружения

Page 4: 2014-11-01 03 Николай Линкер. Open your clojure

О, б-жечки, скобки!

Page 5: 2014-11-01 03 Николай Линкер. Open your clojure

Мы – рабы привычек

• Обычные калькулятры • МК-61

Page 6: 2014-11-01 03 Николай Линкер. Open your clojure

Но мы можем выработать новые привычки!

• Java

• !k, ++a, a++

• !a ? b + 1: b – 1

• new java.util.ArrayList(10)

• Math.pow(2, 10)

• “hello”.substring(1, 3)

• Integer.MAX_VALUE

• obj.field

• alist instanceof java.util.List

• Clojure

• (not k), (inc a), …

• (if (not a) (inc b) (dec b))

• (new java.util.ArrayList 10)

• (Math/pow 2 10)

• (.substring “hello” 1 3)

• Integer/MAX_VALUE

• (.field obj)

• (instance? java .util.List alist)

Page 7: 2014-11-01 03 Николай Линкер. Open your clojure

Гармония, как она есть

(+ 2 3)

Это просто список

Сначала вычисляются аргументы

Затем сама операция

Page 8: 2014-11-01 03 Николай Линкер. Open your clojure

Code = data = code

• Код = абстрактное синтаксическое дерево

непревзойдённая лёгкость оперирования с самой программой

Page 9: 2014-11-01 03 Николай Линкер. Open your clojure

Динамический строго типизированный

(count [1 2 3])

(count {:a 1 :b 2 :c 3})

(count #{1 2 3})

(count ‘(1 2 3))

(:a {:a 1 :b 2 :c 3}) ; => 1

({:a 1 :b 2 :c 3} :c) ; => 3

Page 10: 2014-11-01 03 Николай Линкер. Open your clojure

REPL

Android users: https://play.google.com/store/apps/details?id=com.sattvik.clojure_repl

Умная командная строка + поддержка IDE

Page 11: 2014-11-01 03 Николай Линкер. Open your clojure

Функциональный

• Функции – главная движущая сила

• Неизменяемые коллекции

• Структуры данных объявляются, не присваиваются

• Контролируемое изменение данных (atoms, STM)

Page 12: 2014-11-01 03 Николай Линкер. Open your clojure

Функциям здесь хорошо

• (*42 42)

• (fn [x] (* x x))

• ((fn [x] (* x x)) 42) ; => выдаст число

• (def sq (fn [x] (* x x)))

• (defn sq [x] (* x x))

• #(* % %) ; лямбдочка, 1 параметр

• #(* %1 %2) ; лямбдочка, 2 параметр

Page 13: 2014-11-01 03 Николай Линкер. Open your clojure

Изменение неизменяемого

«изменение» списка

«изменение» дерева

Page 14: 2014-11-01 03 Николай Линкер. Open your clojure

Atoms, Refs, Agents

Page 15: 2014-11-01 03 Николай Линкер. Open your clojure

Как выглядит программа на Clojure

• Вначале идёт неймспейс

• Потом декларация(-ии) require

Page 16: 2014-11-01 03 Николай Линкер. Open your clojure

Как выглядит программа на Clojure

• Потом определяются функции, константы и может быть макросы

Page 17: 2014-11-01 03 Николай Линкер. Open your clojure

Тёплое ламповое коммьюнити

• Замечательный доклад, программирование в реальном времениhttp://jokerconf.com/#ryzhikov

• http://clojure.org

• http://tryclj.org

• Коммьюнити менее фрагментировано по сравнению со Scala

Page 18: 2014-11-01 03 Николай Линкер. Open your clojure

Have fan!

Page 19: 2014-11-01 03 Николай Линкер. Open your clojure

Спасибо