3. Про scala за 3 минуты
• Статическая типизация(!)
• Платформы
– Java
– .Net
• Functional…
– Функции высшего порядка
– Хвостовая рекурсия
– Отложенные вычисления
• Pattern matching всего на свете
• Компактный синтаксис(по сравнению с Java)
• Обобщенные синтаксические конструкции
4. Concurrency
• Actors
– Идея взята из Erlang
• Immutabe values
• Concurrent collections
– val doubled = list.par map(x => x * 2)
– конечно надо быть осторожным
• Akka
– Software transactional memory
– futures
5. OOП?
• Есть конечно!
• Намного меньше boilerplate code чем в
Java(покажу дальше)
• Нет множественного наследования
– Зато есть traits
– Это такие интерфейсы c частичной реализацией
• static Objects
6. Немного синтетики
def max(a,b) = if (a > b) a else b
class Person(val name: String, val age: Int) {
require(name.length != 0) //will generate exception
require(age > 0)
def and(that: Person): Love = new Love(this, that)
}
val Mike = new Person(“Mike", 17)
val Jane = new Person("Jane", 23)
val love = Mike and Jane
7. //Java
import java.util.ArrayList;
…
Person[] people;
Person[] minors;
Person[] adults;
{
ArrayList<Person> minorsList = new ArrayList<Person>();
ArrayList<Person> adultsList = new ArrayList<Person>();
for (int i = 0; i < people.length; i++)
(people[i].age < 18 ? minorsList : adultsList)
.add(people[i]);
minors = minorsList.toArray(people);
adults = adultsList.toArray(people);
}
//Scala
val people: Array[Person]
val (minors, adults) = people partition(_.age > 18)
8. Идустрии
• Trading platforms
• Financial modeling
• Simulation
– domain-specific languages
• Web platforms
– Play Framework
– Lift
9. Компании
• Twitter
• Foursquare
• Credit Suisse
• LinkedIn
• The Guardian
• Sony, IBM, Nasa, Amazon etc…
10. Что есть у нас?
• Один боевой проект
• Распространяется по компании как зараза
– Разговоры на кухне приобрели
функциональный оттенок
– 16 человек на момент презентации проходят
курсы.
11. Что дальше?
• coursera.org “Functional programming in Scala” от создателя
языка.
• Много действительно хороших книг