SlideShare a Scribd company logo
Clojure –
есть ли жизнь после Java
Clojure –
есть ли жизнь после Java
Ruby
PHP
Scala
Python
Javascript
Go
...
...
Парадигмы
Declarative
SQLDatalog
Prolog
Logic
Functional
ML
Lisp
CLOS
Object-Oriented
Java
C++
C
Pascal
Procedural
Bash
Imperative
Что такое Clojure
• Язык общего назначения

• Запускается на JVM 

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

• С учетом многопоточности
Сильные стороны
• Динамическая разработка (REPL)

• Иммутабельность по умолчанию

• Lisp (compact, code-as-data, macros)

• Concurrency (atoms, software transactional memory)

• Выполняется на JVM (access to the java ecosystem)
* https://leonid.shevtsov.me/post/companies-that-are-using-clojure/
Clojure Basics
Примитивы
"Hello" ;string
1 ;int
1.2 ;float
false ;boolean
[1 2 3] ;vector
(1 2 3) ;list
{:a 1 :b 2} ;hash-map
:abc ;keyword
#{1 2 3} ;set
!8
Вызов функции
(function-name arg1 arg2 arg3)
Имя функции или макроса
Аргументы
s-expression
Functions
(str "Hel" "lo") ; => "Hello"
(+ 1 1) ; => 2
(- 2 1) ; => 1
(* 1 2) ; => 2
(/ 2 1) ; => 2
(= 1 1) ; => true
(= 2 1) ; => false
(< 1 2) ; => true
(> 3 2 1) ; => true
(and true false) ; => false
(or true false) ; => true
(if (> 1 2)
"good"
"bad") ; => "bad"
Functions
(map inc [1 2 3]) ; => (2 3 4)
(filter even? [1 2 3 4]) ; => (2 4)
(reduce + [1 2 3]) ; => 6



(concat [1 2] [3 4]) ; => (1 2 3 4)
(conj [1 2] 3) ; => [1 2 3]
(assoc {:a 1} :b 2) ; => {:a 1 :b 2}
(dissoc {:a 1 :b 2} :b) ; => {:a 1}
Functions
(defn say-hello [name]
(str "Hello " name))
(say-hello "World") ; => "Hello World"
(map (fn [a] (* a a))
[1 2 3 4]) ; => (1 4 9 16)
Functions
( -> some-value
(coerce)
(validate)
(save))
(save (validate (coerce some-value)))
Macros
(defmacro infix
[infixed]
(list (second infixed)
(first infixed)
(last infixed)))
(infix (1 + 1)) ; => 1
Macros
Vars and Bindings
(def word "hi")
(def n 3)
(repeat n word) ; => ("hi" "hi" "hi")
(let [a 2
b 3]
(+ a b)) ; => 5
Java Interoperation
(import java.util.Date)
(Date.) ; => <a date object>
(.getTime (Date.)) ; => 1534589618419
(System/currentTimeMillis) ; => 1534589705587
Live Coding
Learn Clojure
• braveclojure.com

• clojurecourse.by

More Related Content

PDF
Reform: путь к лучшему ORM
PDF
2014-11-01 03 Николай Линкер. Open your clojure
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
PDF
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PDF
ECMAscript harmony
Reform: путь к лучшему ORM
2014-11-01 03 Николай Линкер. Open your clojure
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
ECMAscript harmony

What's hot (20)

PDF
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PDF
Clojure #2 (2014)
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PDF
PDF
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
PDF
Python&Printer / Андрей Пучко / penta.by
PDF
Caching data outside Java Heap and using Shared Memory in Java
PDF
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
PDF
"Деплой кода процедур" Мурат Кабилов (Avito)
PDF
Kubernetes в Avito - Евгений Ольков
PDF
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
PDF
Scala on android
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
PDF
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
PDF
Something about Golang
PDF
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
PDF
Паттерны и примеры структур данных в NoSQL на примере Tarantool
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Clojure #2 (2014)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Python&Printer / Андрей Пучко / penta.by
Caching data outside Java Heap and using Shared Memory in Java
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
"Деплой кода процедур" Мурат Кабилов (Avito)
Kubernetes в Avito - Евгений Ольков
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Scala on android
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
Something about Golang
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Ad

Similar to Clojure – есть ли жизнь после Java (20)

PPTX
Clojure: Lisp for the modern world (русская версия)
PDF
Обзор ES2015(ES6)
PDF
Введение в Clojure (Margincon 2010)
PDF
Functional
PDF
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
PDF
Лекция 2. Всё, что вы хотели знать о функциях в Python.
PDF
Лекция о языке программирования Haskell
PDF
Pyton – пробуем функциональный стиль
PDF
Elixir: The Future of Web Development | Elixir: Будущее веб-разработки
PPT
PHP Tricks
PPTX
Система обработки бизнес-логики server-side приложения на Groovy
PPTX
PowerShell
PPTX
Dsl for c++
PPTX
Компилируемые в реальном времени DSL для С++
ODP
Константин Осипов (Mail.Ru)
PDF
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
PDF
Enter: legacy code
PDF
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
PDF
UWDC 2013, Yii2
Clojure: Lisp for the modern world (русская версия)
Обзор ES2015(ES6)
Введение в Clojure (Margincon 2010)
Functional
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция о языке программирования Haskell
Pyton – пробуем функциональный стиль
Elixir: The Future of Web Development | Elixir: Будущее веб-разработки
PHP Tricks
Система обработки бизнес-логики server-side приложения на Groovy
PowerShell
Dsl for c++
Компилируемые в реальном времени DSL для С++
Константин Осипов (Mail.Ru)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Enter: legacy code
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
UWDC 2013, Yii2
Ad

Clojure – есть ли жизнь после Java