This is an updated version* of a presentation devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.
This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at Java Day Lviv on June 14, 2015.
* The first version of the presentation (in Russian) can be found here: http://www.slideshare.net/GlobalLogicUkraine/ss-48746051
More details: http://globallogic.com.ua/java_day_lviv_2015_presentations
5. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
Знайомимося:
6. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Знайомимося:
7. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Хто розуміє, що таке ФП?
Знайомимося:
8. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Хто розуміє, що таке ФП?
Хто знає, що таке сайд-ефект?
Знайомимося:
9. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Хто розуміє, що таке ФП?
Хто знає, що таке сайд-ефект?
Хто знає, що таке гомотопічні групи?
Знайомимося:
10. Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Хто розуміє, що таке ФП?
Хто знає, що таке сайд-ефект?
Хто знає, що таке гомотопічні групи?
Знайомимося:
11. Знайомимося:
Комерційний досвід у Java з 2004 року:
web, enterprise, J2ME, Android,
embedded.
“Functional Programming in Scala” @ Coursera (2012)
2013–Present – Scala-based back-end
18. Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
“Імперативщики” та “декларативщики”
Сіньори та не-сіньори
19. Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
“Імперативщики” та “декларативщики”
Сіньори та не-сіньори
“Адеквати” та “неадеквати” з т. з. codebase
20.
21. Scala
If I were to pick a language today other than Java,
it would be Scala.
(James Gosling, creator of Java, 2011)
I can honestly say if someone had shown me the
“Programming in Scala” book back in 2003, I'd
probably never created Groovy.
(James Strachan, creator of Groovy, 2009)
27. А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність розробки
28. А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність розробки
Але ж ФП вже 50 років…
29. А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність розробки
Але ж ФП вже 50 років…
ООП пропонувало те ж саме 30 років тому!
32. З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
збільшується кількість ядер ЦП
в існуючих програмних моделях
локи не скейляться
34. З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
збільшується кількість ядер ЦП
в існуючих програмних моделях
локи не скейляться
потрібні абстракції більш високого
рівня, де parallel ≈ distributed
35. З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
збільшується кількість ядер ЦП
в існуючих програмних моделях
локи не скейляться
потрібні абстракції більш високого
рівня, де parallel ≈ distributed
відокремлення поведінки від стану!
46. Scala
Перш ніж почати програмувати на Java,
треба прочитати книжку
“Effective Programming in Java”.
Чому ж просто не створити ефективну Java?
І насправді вона вже створена – це Scala!
(Dr. Venkat Subramaniam)
55. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()
56. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
57. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
58. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here ?
62. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
63. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Bad practice
64. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()
Side-effects here
No side-effects here
WILL compile !!!
Bad practice
70. Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Bad practice
106. Метод Spaced Repetitions:
що запам'ятовую я
Вправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я
втратив більше години і які можно зрозуміло
сформулювати
107. Метод Spaced Repetitions:
що запам'ятовую я
Вправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я
втратив більше години і які можно зрозуміло
сформулювати
Wow-знахідки
108. Метод Spaced Repetitions:
що запам'ятовую я
Вправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я
втратив більше години і які можно зрозуміло
сформулювати
Wow-знахідки
Що завгодно!
109. M A N N I N G
IN ACTION
Nilanjan Raychaudhuri
FOREWORD BY Chad Fowler
Covers Scala 2.10
110. M A N N I N G
IN ACTION
Nilanjan Raychaudhuri
FOREWORD BY Chad Fowler
Covers Scala 2.10