Simplifying development-short - Mirco Dotta (Typesafe)
Upcoming SlideShare
Loading in...5
×
 

Simplifying development-short - Mirco Dotta (Typesafe)

on

  • 362 views

Scala meetup - Milan, 25 May 2013 ...

Scala meetup - Milan, 25 May 2013

Una delle caratteristiche peculiari di Scala consiste nel semplificare e velocizzare la fase di sviluppo del software. Unificando la programmazione orientata agli oggetti con la programmazione funzionale, Scala permette di esprimervi in maniera concisa ed efficace. In questa presentazione saranno introdotte le caratteristiche principali del linguaggio e la sua filosofia, al fine di mostrare come del codice scritto in Scala risulti più semplice, corretto e manutenibile.

Statistics

Views

Total Views
362
Views on SlideShare
332
Embed Views
30

Actions

Likes
0
Downloads
4
Comments
0

2 Embeds 30

http://scala-italy.it 19
http://www.scala-italy.it 11

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Simplifying development-short - Mirco Dotta (Typesafe) Simplifying development-short - Mirco Dotta (Typesafe) Presentation Transcript

  • ScalaSimplifying DevelopmentScalaDay ItalyMilan, May 25, 2013Mirco DottaSunday, May 26, 13
  • Is Scala the Java of thefuture?1/38Sunday, May 26, 13
  • • It has basically everything Java has now• It has closures (planned for Java 8)• It has rich interfaces (Java 8 defendermethods), and more• It is completely interoperable and runsabout as fast as Java2/38Sunday, May 26, 13
  • How is Scala differentfrom Java?3/38Sunday, May 26, 13
  • Concise Syntax4/38Sunday, May 26, 13
  • public class Time {private final int hours;private final int minutes;public Time(int hours, int minutes) {this.hours = hours;this.minutes = minutes;}public int getHours() { return hours; }public int getMinutes() { return minutes; }}class Time(val hours: Int, val minutes: Int)5/38Sunday, May 26, 13
  • Statically typedbut feels dynamic6/38Sunday, May 26, 13
  • val x = 2type is inferredno semicolon7/38Sunday, May 26, 13
  • Unifies OOP and FP8/38Sunday, May 26, 13
  • Every value is an object9/38Sunday, May 26, 13
  • List(1,2,3).filter(x => x > 2) //> res: List[Int] = List(3)Anonymous function Int => BooleanList(1, 2, 3).filter(new Function[Int, Boolean] {def apply(x: Int): Boolean = x > 2})///> res: List[Int] = List(3)Functions are “just” objects10/38Sunday, May 26, 13
  • Everything is anexpression11/38Sunday, May 26, 13
  • def max(x: Int, y: Int): Int =if (x > y) x else yno return statementval x: Int = {val y = 10val z = 5y + z}blocks evaluate to lastexpression12/38Sunday, May 26, 13
  • Every operation is amethod call13/38Sunday, May 26, 13
  • val x: Int = 10val y = x + 10same as x.+(10)14/38Sunday, May 26, 13
  • Principles, not Rules15/38Sunday, May 26, 13
  • Users can write their own operators16/38PrincipleSunday, May 26, 13
  • class Complex(val re: Int, val im: Int = 0) {def +(that: Complex) =new Complex(this.re + that.re, this.im + that.im)override def toString = s"$re + $im"}val c1 = new Complex(1, 2) //> c1 : Complex = 1 + 2val c2 = new Complex(2, 2) //> c2 : Complex = 2 + 2val c = c1 + c2 //> c : Complex = 3 + 4default argument17/38Sunday, May 26, 13
  • • new types can look like built-in ones• “grow the language”Sunday, May 26, 13
  • Powerful collections18/38Sunday, May 26, 13
  • case class Time(hours: Int, minutes: Int = 0)val times = List(Time(1), Time(2), Time(12,30), Time(16,15))times.filter(time => time.hours >= 12)//> res: List[Time] = List(Time(12,30), Time(16,15))times.map(time => Time(time.hours + 1, time.minutes))//> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30),Time(17,15))times.take(2) //> res: List[Time] = List(Time(1,0), Time(2,0))times.groupBy(time => time.minutes) //> res: Map[Int,List[Time]] =Map(30 -> List(Time(12,30)), 15 -> List(Time(16,15)), 0 ->List(Time(1,0), Time(2,0)))times.head //> res: Time = Time(1,0)times.last //> res: Time = Time(16,15)19/38Sunday, May 26, 13
  • For-comprehension20/38Sunday, May 26, 13
  • • More general than for-loops• Used to iterate, filter, and generate newcollections21/38Sunday, May 26, 13
  • for (p <- persons; pr <- p.projects;if pr.overdue) yield p.namemay have any number of generatorsguard construct a new collection of the sametype, element by elementp is in scope for other generators22/38Sunday, May 26, 13
  • times.filter(time => time.hours >= 12)//> res: List[Time] = List(Time(12,30), Time(16,15))for(time <- times;if time.hours >= 12) yield time//>res: List[Time] = List(Time(12,30), Time(16,15))times.map(time => Time(time.hours + 1, time.minutes))//> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30),Time(17,15))for(time <- times)yield Time(time.hours + 1, time.minutes)//> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30),Time(17,15))23/38Sunday, May 26, 13
  • Desugared to calls to filter, map, andflatMap24/38Sunday, May 26, 13
  • Readily available on any classimplementing those methods!25/38Sunday, May 26, 13
  • Traits26/38Sunday, May 26, 13
  • • Like Java interfaces, but traits• can have behavior (like Java 8 interfaceswith defender methods)• can have state• enable multiple inheritance27/38Sunday, May 26, 13
  • public interface Comparable<T> {int compareTo(int o);}trait Comparable[T] {def compareTo(that: T): Int}def <(that: T): Boolean =(this compare that) < 0def >(that: T): Boolean =(this compare that) > 0//... RichInterface28/38Sunday, May 26, 13
  • Multiple Inheritance• Traits can mix-in multiple traits• Classes can mix-in multiple traits• Both Class and Trait can inherit at mostfrom one Class29/38Sunday, May 26, 13
  • trait Bird {def fly: String = "Im flying!"}trait Swimmer {def swim: String = "Im swimming!"}class Fish extends Swimmerclass Duck extends Bird with Swimmer30/38Sunday, May 26, 13
  • Embedding DSLsSunday, May 26, 13
  • Scala simplifiesdevelopment because...32/38Sunday, May 26, 13
  • Less is More33/38Sunday, May 26, 13
  • Few languageconstructs with highabstraction power34/38Sunday, May 26, 13
  • It’s Fun!35/38Sunday, May 26, 13
  • Good for yourbusiness?36/38Sunday, May 26, 13
  • 37/38Sunday, May 26, 13
  • Get Started in 5’38/38http://www.typesafe.com/platform/getstartedSunday, May 26, 13
  • Thankstwitter: @mircodottaSunday, May 26, 13