Professional Documents
Culture Documents
. Scala
Epam Systems.
, 2011
. Scala
Scala
Scala
Scala?
Pattern matching
. Scala
Scala
. Scala
Scala
. Scala
Scala
?
,
.
. Scala
Scala
?
,
.
,
/
. Scala
Scala
Java
if ( i >0){
System.out.println("Hello my lovely Java");
}
. Scala
Scala
Java
if ( i >0){
System.out.println("Hello my lovely Java");
}
...
if (>(i() ,0) , callMethod(getMember(System(),"out"),"println","Hello my lovely Java"))
. Scala
Scala
,
Java
. Scala
Scala
,
Java
Java
- func(arg1,arg2,arg3),
. Scala
Scala
,
Java
Java
- func(arg1,arg2,arg3),
. Scala
Scala
?
= - ,
. Scala
Scala
?
= - ,
,
( )
.
. Scala
Scala
?
= - ,
,
( )
.
if - ?
. Scala
Scala
?
= - ,
,
( )
.
if - ?
, ?
. Scala
Scala
?
= - ,
,
( )
.
if - ?
, ?
. Lisp.
. Scala
Scala
environment ,
,
.
,
,
,
, ,
? ? Erlang
.
. Scala
Scala
. Scala
Scala
. Scala
Scala
Scala?
Pattern matching
Scala
Scala ,
.
. Scala
Scala
Scala?
Pattern matching
Scala
Scala ,
.
Scala SCAlable LAnguage.
. Scala
Scala
Scala?
Pattern matching
Scala
Scala ,
.
Scala SCAlable LAnguage.
- .
JVM .NET
. Scala
Scala
Scala?
Pattern matching
Hello Scala
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
Function types
Scala
def m(x:Int, y:Int) = x+y
val m1: (Int, Int)=>Int = m
val m2: (Int, Int)=>Int = {(x,y)=>x+y}
val m3: (Int, Int)=>Int = {_+_}
val m4 = {(x:Int, y:Int)=>x+y}
object m5{
def apply(x:Int , y:Int) = x+y
}
m5(1,2)
class m6{
def apply(x:Int , y:Int) = x+y
}
val m6Instance = new m6();
m6(2,3);
. Scala
Scala
Scala?
Pattern matching
Function types
Scala
def m(x:Int, y:Int) = x+y
val m1: (Int, Int)=>Int = m
val m2: (Int, Int)=>Int = {(x,y)=>x+y}
val m3: (Int, Int)=>Int = {_+_}
val m4 = {(x:Int, y:Int)=>x+y}
object m5{
def apply(x:Int , y:Int) = x+y
}
m5(1,2)
class m6{
def apply(x:Int , y:Int) = x+y
}
val m6Instance = new m6();
m6(2,3);
Scala
,
. Scala
Scala
Scala?
Pattern matching
Measure
val time = measure{
Thread.sleep(1000)
}
println (time)
. Scala
Scala
Scala?
Pattern matching
Measure
def measure(f: =>Unit):Long={
val time = System.currentTimeMillis
f
return System.currentTimeMillistime
}
Measure
val time = measure{
Thread.sleep(1000)
}
println (time)
. Scala
Scala
Scala?
Pattern matching
Measure
val time = measure{
Thread.sleep(1000)
Measure
}
println (time)
object measure{
def apply(f : =>Unit):Long={
val time = System.currentTimeMillis
f
return System.currentTimeMillistime
}
}
. Scala
Scala
Scala?
Pattern matching
Measure
measure.andLog{
Thread.sleep(1000)
}
. Scala
Scala
Scala?
Pattern matching
Measure
Measure
measure.andLog{
Thread.sleep(1000)
object measure{
def apply(f : =>Unit)={
val time = System.currentTimeMillis
f
System.currentTimeMillistime
}
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
if
unless(age<=0){
println ("Normal person")
}butif{
println ("Something strange")
}
. Scala
Scala
Scala?
Pattern matching
if
unless(age<=0){
println ("Normal person")
}butif{
println ("Something strange")
}
object unless{
def apply(b: Boolean)(f: =>Unit)={
if (! b){
f
}
return new butifHandler(b)
}
class butifHandler(b: Boolean){
def butif ( f : =>Unit){
if (b)
f
}
}
}
. Scala
Scala
Scala?
Pattern matching
Squeryl
transaction {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) // LINQ??? Nope =)
}
. Scala
Scala
Scala?
Pattern matching
Squeryl
transaction {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) // LINQ??? Nope =)
}
ScalaTest
describe("A Stack") {
it ("should pop values in last infirstout order") { pending }
it ("should throw NoSuchElementException if an empty stack is popped") {pending}
}
. Scala
Scala
Scala?
Pattern matching
Squeryl
transaction {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) // LINQ??? Nope =)
}
ScalaTest
describe("A Stack") {
it ("should pop values in last infirstout order") { pending }
it ("should throw NoSuchElementException if an empty stack is popped") {
val emptyStack = new Stack[Int]
intercept [ NoSuchElementException] {
emptyStack.pop()
}
}
}
. Scala
Scala
Scala?
Pattern matching
Squeryl
transaction {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) // LINQ??? Nope =)
}
ScalaTest
describe("A Stack") {
it ("should pop values in last infirstout order") { pending }
it ("should throw NoSuchElementException if an empty stack is popped") {
val emptyStack = new Stack[Int]
intercept [ NoSuchElementException] {
emptyStack.pop()
}
}
}
Scala C#
using(new PrintWriter("sample.txt")){ out =>
out. println ("hellow world!")
}
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
?
- ,
. Scala
Scala
Scala?
Pattern matching
?
- ,
?
. Scala
Scala
Scala?
Pattern matching
?
- ,
?
, ,
. Scala
Scala
Scala?
Pattern matching
?
- ,
?
, ,
Scala ,
. Scala
Scala
Scala?
Pattern matching
Scala
Mutable
Java
Array Buffers
Java
List Buffers
Immutable
StringBuilders
Double Linked Lists
Lists
Mutable Lists
Streams
Queues
Vectors
Array Sequences
Immutable stacks
Stacks
Immutable Queues
Array Stacks
Ranges
Hash Tables
Hash Tries
Red-Black Trees
Concurrent Maps
Immutable BitSets
Mutable Bitsets
List Maps
. Scala
Scala
Scala?
Pattern matching
Stream
.
.
" "
Range
, ,
( ) for,
Range foreach
for
for ( i < 0 to 10 by 2){
println ( i )
}
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
...
val tuple1 = (2,"test")
val tuple2 = 2>"test"
val array1 = Array(2,3,3,4)
val array2 = Array.ofDim[Int](3,3,3)
array2(2)(3)(2) = 9
var map
map +=
map =
map =
= Map("red">1,"green">2)
("blue">3 )
"oops"
"blue"
. Scala
Scala
Scala?
Pattern matching
?
,
.
. Scala
Scala
Scala?
Pattern matching
?
,
.
map
reduce,foldLeft/foldRight
filter
partition
forAll
groupBy
...
. Scala
Scala
Scala?
Pattern matching
map
,
. Scala
Scala
Scala?
Pattern matching
map
,
import scala.math._
// Returns new list, where all values are scaled
def scale (a: List [ Double], value:Double) = a.map(_value)
// Selects elements from list with given indicies
def selectItems [ T](data:List [ T], indicies : List [ Int ]) = indicies . map(data(_))
// Adds values of two lists together where they intersect by length
def addLists( list1 : List [ Int ], list2 : List [ Int ]) =
(0 until min(list1 . length, list2 . length)) . map({x=>list1(x)+list2(x)})
. Scala
Scala
Scala?
Pattern matching
foldLeft
. Scala
Scala
Scala?
Pattern matching
foldLeft
def
def
def
def
def
. Scala
Scala
Scala?
Pattern matching
filter
,
partition
,
forAll
groupBy
, , .
groupBy Map
. Scala
Scala
Scala?
Pattern matching
For comprehensions
, for comprehensions
for (item < (1 to 100)){
println (item)
}
val newList = for (item < list if (item%4>1)) yield 2item;
Range(1,100).foreach{
println (_)
}
val newList2 = list . filter (_%4>1).map(2_)
. Scala
Scala
Scala?
Pattern matching
. Scala
Scala
Scala?
Pattern matching
Pattern matching
Pattern matching
, switch-
item match {
case 2 => 4
case "hello" => 33
case x :: tail => x
case Point(x,y) => x+y
case _ => error("cannot process")
}
. Scala
Scala
Scala?
Pattern matching
val func = {item:Any=>
item match {
...
case Point(x,y) => x+y
...
}
}
. Scala
Scala
Scala?
Pattern matching
val func = {item:Any=>
item match {
...
case Point(x,y) => x+y
...
}
}
.
.
. Scala
Scala
Scala?
Pattern matching
val func = {item:Any=>
item match {
...
case Point(x,y) => x+y
...
}
}
.
.
object Point{
def unapply(p:Point):Option[(Int,Int) ] = Some(p.x,p.y)
}
class Point(fx : Int , fy : Int){
val x = fx
val y = fy
}
. Scala
Scala
Scala?
Pattern matching
Case class
,
. Scala
Scala
Scala?
Pattern matching
Case class
,
Scala " "
. Scala
Scala
Scala?
Pattern matching
Case class
,
Scala " "
Case class
: case class Point(x:Int, y:Int)
-
final
. var pt = Point(2,3)
hashCode equals
toString - Point(2,3)
. Scala
Scala
Scala (lazy, view)
Scala (, )
Scala (traits mixins)
Scala ( )
Scala ()
. Scala