Прокофьева_доклад.pptx
- Количество слайдов: 44
СПб. ПУ Кафедра «Прикладная математика» Язык Scala Доклад на семинаре по специальности Студентка гр. 43601/2 Вероника Прокофьева 23. 12. 2014
Содержание Введение 1. Ключевые аспекты 2. История создания, версии 3. Основные объекты, конструкции, синтаксис 4. Элементы языка 5. Среда исполнения 6. Стандартные библиотеки 7. Документированность, сопровождение 8. Перспективы развития Заключение 23. 12. 2014 2
Язык, сочетающий возможности функционального и объектно – ориентированного программирования. Иметь лучшее двух миров. Строить элегантные классовые иерархии для максимального повторного использования кода и расширяемости, реализовывать их поведение, используя функции высшего порядка. Или нечто посередине. 23. 12. 2014 3
Ключевые аспекты 23. 12. 2014 4
A Scalable language Scala – масштабируемый язык возможность с помощью одних и тех же концепций описать как маленькие, так и большие части Скриптовый язык краткость и низкая формальность синтаксиса выведение типов победа Script. Bowl на Java. One 2012 Критические системы наравне с Java чёткая типизация используют Twitter, Intel Масштабируемость Scala – результат тщательного интегрирования концепций объектно–ориентированных и функциональных языков. 23. 12. 2014 5
Объектно – ориентированный Scala – чистокровный объектно – ориентированный язык Поддержка продвинутой архитектуры с помощью классов и типажей Каждое значение – объект Каждая операция – вызов метода Поддержка множества шаблонов разработки других языков 23. 12. 2014 6
Функциональный Scala – развитый функциональный язык Каждая функция – значение Библиотека с эффективными неизменяемыми структурами данных Приоритет неизменяемости перед изменяемостью Возможен постепенный переход на более функциональный стиль путём постепенного избавления от изменяемых состояний 23. 12. 2014 7
Java для Scala Программа на Scala компилируется для JVM Можно перемешивать классы Scala и Java Все библиотеки Java доступны в Scala Средства сборки (ant, maven) доступны в Scala IDE (Intelli. J, Eclipse, Netbeans) поддерживают Scala 23. 12. 2014 8
Выполнение У Scala есть компилятор ? ! 23. 12. 2014 9
Выполнение У Scala есть компилятор и интерпретатор 23. 12. 2014 10
Fun Возможно, самое важное – программирование на Scala доставляет большое удовольствие! Никакой скудности Rapid iteration Безопасность статически типизированной системы “ We’ve found that Scala has enabled us to deliver things faster with less сode. It’s reinvigorated the team. ” 23. 12. 2014 11
История создания 23. 12. 2014 12
История создания (2) Scala создана в 2003 году Создатель Мартин Одерски и его исследовательская группа в Федеральной политехнической школе Лозанны Место создания (см. предыдущий слайд) Лозанна, Швейцария 23. 12. 2014 13
Версии Конец 2003 – внутренний релиз начало 2004 – на платформе Java июнь 2004 -. NET платформа 2006 – версия 2. 0 2012 – прекращение поддержки. NET сейчас – версия 2. 11. 4 23. 12. 2014 14
Основные объекты, конструкции, синтаксис 23. 12. 2014 15
Переменные var my. Var : Int = 0; val my. Val : Int = 1; // переменная типа Int // константа, Int, значение 1 var my. Var = 0; // компилятор выведет тип // по значению 0 var my. Var : Int; // тип обязателен, если нет // инициализации Переменные бывают полями класса локальными параметрами метода 23. 12. 2014 16
Типы данных Встроенные типы в Scala Boolean, Byte, Short, Char, Int, Long, Float, Double, String var my. Int : Int // сначала имя, потом тип! Все типы данных – объекты! нет примитивных типов в отличие от Java => можно вызывать методы у Int, Long и т. д. 23. 12. 2014 17
Массивы Scala – неизменяемые объекты // массив String-ов длины 10, изменить длину нельзя var my. Array : Array[String] = new Array[String](10); // обращение к элементу - индексы с 0, круглые скобки var a. String : String = my. Array(0); Итерироваться можно по индексу или по элементу for(i <- 0 until my. Array. length){ } // по индексу for(my. String <- my. Array) { } // по элементу 23. 12. 2014 18
Условный оператор if Обычный if/else if(my. Int == 0) { // возвращаемое значение - true/false println("my. Int == 0"); } else { // скобки можно опустить println("my. Int != 0"); } If как функция var my. Text : String = if(my. Int == 0) "my. Int == 0"; else "my. Int != 0"; // вернёт это println(my. Text); 23. 12. 2014 19
Цикл for(i <- 1 to 10) { // (1). to(10) - вызов метода, вернёт Range // <- - выражение-генератор println("i is " + i); } // скобки можно опустить Условие на итерации var my. Array : Array[String] = new Array[String](10); for(i <- 0 until my. Array. length) my. Array(i) = "value is: " + i; for(value : String <- my. Array if value. ends. With("5")) println(value); // "value is: 5" - значение my. Array(5) 23. 12. 2014 20
Классы class My. Class { var my. Field : Int = 0; // поле типа Int // конструктор с параметром def this(value : Int) = { this(); // вызов конструктора без параметров this. my. Field = value; } // метод, возвращающий Int значение def get. My. Field() : Int = { return this. my. Field; } } // метод без возвращаемого значения def add. To. My. Field(value : Int) { this. my. Field += value; } 23. 12. 2014 21
Singleton и Companion class Main статических полей и методов В Scala нет { // класс def say. Hello. World() { Замена – singleton или companion объект println("Hello World"); Singleton объект – класс с единственным экземпляром } } object Main { // singleton объект Main def say. Hi() { println("Hi!"); } } var a. Main : Main = new Main(); a. Main. say. Hello. World(); // можно так Main. say. Hi(); 23. 12. 2014 22
Singleton и Companion (2) class Main { // класс def say. Hello. World() { println("Hello World"); } } object Main { // компаньон для класса Main def say. Hi() { println("Hi!"); } } var a. Main : Main = new Main(); a. Main. say. Hello. World(); // можно так Main. say. Hi(); 23. 12. 2014 // или так 23
Выполнение программы Чтобы выполнить программу на Scala, используя команду scala, нужно создать singleton объект с методом main: object Name { def main(args: Array[String]) { println("Execution starts here. "); } } scala -classpath. Name arg 1 arg 2 23. 12. 2014 24
Анонимные функции – λ Scala – функциональный язык def f(x : Int): Int = { return x * x } // функция f (x: Int) => x * x // анонимная функция (1 to 5). map( x => x*x ) // 1, 2, 3, 4, 5 -> 2, 4, 6, 8, 10 (1 to 5). map { val x=_*2; println(x); x } // умножить каждый элемент на 2 // вернёт это выражение // выбрать все, которые делятся на 2, умножить их на 2 // вернёт Vector(4, 8) (1 to 5) filter {_%2 == 0} map {_*2} 23. 12. 2014 25
Анонимные функции – λ (2) Полезный пример type R=Double // compose вернёт функцию - композицию g и h def compose(g: R=>R, h: R=>R) = (x: R) => g(h(x)) val f = compose({_*2}, {_-1}) // g = {_*2} Currying // N(mean, sd) val zscore = (mean: R, sd: R) => (x-mean)/sd var my_zscore = zscore(0, 1) println(my_zscore(4)) 23. 12. 2014 26
Элементы языка 23. 12. 2014 27
Библиотека коллекций Важнейшее изменение в версии языка 2. 8 Коллекции Scala легкие в использовании краткие безопасные быстрые универсальные Пример val (children, adults) = people partition (_. age < 18) 23. 12. 2014 28
Коллекции (im)mutable Делятся на изменяемые и неизменяемые Изменяемые – доступны добавить/удалить с изменением коллекции в пакете scala. collection. mutable Неизменяемые – при добавлении/удалении создаётся новая коллекция Гарантия неизменяемости для всех scala. collection. immutable import scala. collection. Set, по умолчанию импортируется immutable! Явно писать import scala. collection. mutable. Set 23. 12. 2014 29
scala. collection Все они – абстрактные классы или типажи, бывают mutable и immutable 23. 12. 2014 30
scala. collection. immutable 23. 12. 2014 31
scala. collection. mutable 23. 12. 2014 32
Множество Пример (неизменяемого множества) val fruit = Set("apple", "orange", "peach", "banana") // fruit: scala. collection. immutable. Set[java. lang. String] // = Set(apple, orange, peach, banana) fruit("peach") // Boolean = true fruit("potato") // Boolean = false Некоторые операции var xs = Set(1, 2, 3) var x = 5 var ys = Set(2, 3) xs contains x xs(x) // то же, что и пред. xs subset. Of ys xs + x // вернёт новое множество Set(1, 2, 3, 5) xs ++ ys // вернёт новое множество - объединение 23. 12. 2014 33
Итераторы Не коллекции, а способы обхода элементов коллекций Две базовые операции итератора it – next и has. Next Вызов it. next() вернёт следующий элемент итератора и т. д. Если больше нет, то No. Such. Element. Exception while (it. has. Next) println(it. next()) it foreach println for (elem <- it) println(elem) 23. 12. 2014 34
Параллельность и одновременность Future – объект, «держащий» значение, которое, возможно, станет доступно в будущем – результат вычислений Для параллельных операций, эффективно и без блокировок => быстрое, асинхронное, параллельное неблокирующее исполнение promise 23. 12. 2014 – заполняет future – success/failure 35
Параллельные коллекции Избавить пользователей от низкоуровневых деталей, предоставляя простые высокоуровневые абстракции Основано на библиотеке коллекций scala. collection Идея: использовать параллельные коллекции ровно так же, как обычные val list = (1 to 10000). to. List // обычный List list. map(_ + 42) // последовательно list. par. map(_ + 42) // параллельно 23. 12. 2014 36
Параллельные коллекции (2) Полезный пример val last. Names = List("Smith", "Jones", "Frankenstein", "Bach"). par // last. Names: // scala. collection. parallel. immutable. Par. Seq[String] // = Par. Vector(Smith, Jones, Frankenstein, Bach) last. Names. map(_. to. Upper. Case) // scala. collection. parallel. immutable. Par. Seq[String] // = Par. Vector(SMITH, JONES, FRANKENSTEIN, BACH) 23. 12. 2014 37
Среда исполнения 23. 12. 2014 38
Eclipse vs Intelli. J IDEA Плагин для Scala “The Most Intelligent IDE for Scala Development” Ahead-of-time Code Completion Студентам бесплатно! https: //www. jetbrains. com/idea/features/scala. html Eclipse Scala. IDE http: //scala–ide. org/ 23. 12. 2014 39
Документированность, сопровождение 23. 12. 2014 40
Сопровождение Scala http: //www. scala-lang. org/ Множество руководств для тех, кто пришёл с Java, Python Словарь Scala Руководства по стилю Ссылки на книги, статьи 23. 12. 2014 41
Документация Scala http: //docs. scala-lang. org/ Очень хорошая документация API Спецификация языка Сообщество 23. 12. 2014 42
Заключение Scala – мультипарадигменный язык программирования Сочетает в себе краткость, ясность, безопасность Совместим с Java Удобные средства разработки Отличное сопровождение Есть перспективы развития 23. 12. 2014 43
Источники Community-driven documentation for Scala docs. scala-lang. org/ Scala www. scala-lang. org/ Wikipedia, статья Scala (programming languages) https: //en. wikipedia. org/wiki/Scala_(programing_language) Scala Tutorial http: //tutorials. jenkov. com/scala/index. html 23. 12. 2014 44
Прокофьева_доклад.pptx