0
введение
Коротко о Scala

 A Scalable Language
 Автор – prof. Martin Odersky (Java Generics)
 Разработка в EPFL началась с 2001 ...
Коротко о Scala

 Интеграция объектно-ориентированного и
  функционального программирования:
  Java, Haskell, Erlang, Sma...
Коротко о Scala

 Статическая типизация
 Переопределение операторов
 Классы по удобству как встроенные типы
  implicit ...
Интерпретатор и компилятор

 Скрипты – получение результата
 Программы – описание действий
 scala – интерпретатор скрип...
Переменные и константы

 Переменные (var) и константы (val )
 Отложенная инициализация (lazy val)
 Предпочтение констан...
Переменные и константы

 Предпочтение неизменяемых объектов
 Предпочтение методов без побочных
  эффектов
 Предпочтение...
Условия и циклы

 Условия: if и if-else
   val test = if (i % 3 == 0) i else 0

 Циклы: while, do-while, for
   for (val...
Классы и объекты

 class и object (singleton)
 Пары связанных классов и объектов
 Независимые объекты
 Точка входа в п...
Универсальный источник

 scala.io.Source – одинаковая работа с
    разными типами источников данных
   fromString()
   ...
Выбор и регулярные выражения

 Простой выбор – константы
  data match {
    case 10 => "number"
    case "dollars" => "st...
Выбор и регулярные выражения

 Использование Regex при выборе
  val Filename = """File:s*(.*)s*""".r
  val Tag = """s+([S...
Массивы и списки

 Array – фиксированный размер,
  изменяемое содержимое
 List – неизменная последовательность
 Операто...
Ссылки и литература

 http://www.scala-lang.org/
 Programming in Scala (2008): Martin Odersky
 Beginning Scala (2009): ...
Upcoming SlideShare
Loading in...5
×

Introduction to Scala by Eduard Shustrov

1,568

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,568
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Introduction to Scala by Eduard Shustrov"

  1. 1. введение
  2. 2. Коротко о Scala  A Scalable Language  Автор – prof. Martin Odersky (Java Generics)  Разработка в EPFL началась с 2001 года  Версия 1.0 появилась в 2003 году  Компилятор генерирует Java byte code  Объём исходников в 2-3 раза меньше Java  От скриптов до enterprise систем: Twitter, Électricité de France, Siemens (+Lift)
  3. 3. Коротко о Scala  Интеграция объектно-ориентированного и функционального программирования: Java, Haskell, Erlang, Smalltalk, Scheme  Всё – объекты, нет примитивных типов 1+2 на самом деле (1).+(2) true.toString в результате даёт "true"  Функции – тоже объекты var average = (x: Int, y: Int) => (x + y) / 2 average(3, 6) – вызов функции из переменной
  4. 4. Коротко о Scala  Статическая типизация  Переопределение операторов  Классы по удобству как встроенные типы implicit def toMyInt(x: Int) = new MyInt(x) class MyInt(x: Int) { private val num = x def - (x: Int): MyInt = num - x def * (x: Int): MyInt = num * x def ! : MyInt = if (num == 0) 1 else ((this - 1)!) * num override def toString = num.toString} println(10!)
  5. 5. Интерпретатор и компилятор  Скрипты – получение результата  Программы – описание действий  scala – интерпретатор скриптов и программ  scalac – компилятор программ $ cat hello.scala println("Hello " + args(0) + "!") $ scala hello.scala world Hello world! $
  6. 6. Переменные и константы  Переменные (var) и константы (val )  Отложенная инициализация (lazy val)  Предпочтение констант переменным class LazyTest { lazy val coef: MyInt = {println("coef"); 15!} def foo() = println("foo()") } val test = new LazyTest test.foo() println(test.coef)
  7. 7. Переменные и константы  Предпочтение неизменяемых объектов  Предпочтение методов без побочных эффектов  Предпочтение рекурсии циклам (tail-call)  Локализация переменных def pi(appr: Double, i: Int): Double = { val delta = 4.0 / (2 * i + 1) if (delta < 0.0000001) appr else if (i % 2 == 0) pi(appr + delta, i + 1) else pi(appr - delta, i + 1)} println(pi(0, 0))
  8. 8. Условия и циклы  Условия: if и if-else val test = if (i % 3 == 0) i else 0  Циклы: while, do-while, for for (val i <- 1 to 100 if i % 7 == 0) { println(i) }  Метод foreach args.foreach(arg => println(arg + "..."))
  9. 9. Классы и объекты  class и object (singleton)  Пары связанных классов и объектов  Независимые объекты  Точка входа в программу object App { def main(args: Array[String]): Unit = { for (arg <- args) { println(arg) } } }
  10. 10. Универсальный источник  scala.io.Source – одинаковая работа с разными типами источников данных  fromString()  fromIterable()  fromPath()  fromURL() getWeather( Source.fromURL("http://www.ilm.ee/tallinn") ) getWeather(Source.fromPath("tallinn.html"))
  11. 11. Выбор и регулярные выражения  Простой выбор – константы data match { case 10 => "number" case "dollars" => "string" case _ => "other" }  Выбор с переменными data match { case 10 => "number" case "dollars" => "string" case other => "other: " + other }
  12. 12. Выбор и регулярные выражения  Использование Regex при выборе val Filename = """File:s*(.*)s*""".r val Tag = """s+([S:]*):s*([d.]*)s*""".r for (line <- source.getLines()) { line match { case Filename(file) => println("File: '" + file + "'") case Tag(tagName, tagNumber) => println("Tag: '" + tagName + "'" + " (" + tagNumber + ")") } }
  13. 13. Массивы и списки  Array – фиксированный размер, изменяемое содержимое  List – неизменная последовательность  Операторы обработки списков: :: и ::: val modern = List("red", "yellow", "green") val classic = "black" :: "white" :: Nil (classic ::: modern).foreach(println)  ArrayBuffer и ListBuffer как временная замена для интенсивных модификаций
  14. 14. Ссылки и литература  http://www.scala-lang.org/  Programming in Scala (2008): Martin Odersky  Beginning Scala (2009): David Pollak (Lift)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×