SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Java
         Scala

          2009.10 SD2China

Caoyuan (NetBeans Dream Team Memeber)


     http://blogtrader.net/dcaoyuan/
•   JVM
    123.toByte
    "1".toInt
    true.toString


•   val compare = (x: Int, y: Int) => x > y
    compare(1, 2) // result: Boolean = false


•   Java sta&c
                                (   )                Scala   object
    object Dog {
      val whatever = "dog" // static field in Java
    }
    class Dog {
      def callWhatever = Dog.whatever
    }
•   val compare = (x: Int, y: Int) => x > y
    list sortWith compare


•   class AComparator {
      def compare(x: Int, y: Int) = x > y
    }
    list sortWith (new AComparator).compare


•   object annonymous extends scala.Function2[Int, Int, Boolean] {
      override def apply(x: Int, y: Int) = x > y
    }
    list sortWith annonymous


•           sta&c                             object
          (     )
(1)
•   1.+(1)
                                                              ”.” ”()”
    1 + 1
    1.>(0)
    1 > 0
    (1 > 0).&(2 > 1)
    (1 > 0) & 2 > 1
    stack.push(10)
    stack push 10
    stack.pop
    stack pop

•   stack   push {
                                      {...}
      val   a = 1
      val   b = 2
      a +   b
    }

•   def !@#%^&*-<=>?|~:/ = println("noop")
    def √(x: Double) = Math.sqrt(x)
    val Π = Math.Pi
    val r = √(9*Π)

•   ‘<’, ‘>’                                  ’[’ ‘]’
(2)
•   for
    for (i <- List(1, 2)) {
      println(i)
    }
    List(1, 2) foreach {i => println(i)}

    for (i <- List(1, 2)) yield {
      i + 10
    }
    List(1, 2) map {i => i + 10}


•   // synchronized is function call instead of keyword
    def check = synchronized {
      // isInstanceOf is function call instead of keyword
      100.isInstanceOf[String]
    }


•   stack.pop.asInstanceOf[Int] // (Integer) stack.pop() in Java
•                                      return
    val r1 = { // return 3
      val a = 1
      val b = 2
      a + b
    }

    val r2 = if (true) 1 else 2

    val r3 = // return (): Unit
      for (i <- List(1, 2)) {
        println(i)
      }

    val r4 = // return List(11, 12)
      for (i <- List(1, 2)) yield {
        i + 10
      }

    val r5 = // return java.io.File
      try {
        val f = new File("afile")
        f
      } catch {
        case ex: IOException => null
      }
Scala




           (   )


           =
        OO + FP
(1)
•   Scala                              Any Any                JVM

    •   JVM             (byte, short, char, int, long, float, double, boolean) void
    •     Scala     (Byte, Short, Char, Int, Long, Float, Double, Boolean) Unit
           AnyVal
    •   JVM               AnyRef (java.lang.Object)

    // Scala, Array     8
    val arrayOfListOfString = new Array[List[String]](10)
    val arrayOfAny: Array[_] = Array(1, 2)
    // Java
    List<String>[] arrayOfListOfString = new ArrayList<String>[10]



•   Scala                                 Null     Nothing
    •   JVM    null      Null              AnyRef
    •   Nothing Scala              (     AnyVal AnyRef)
(1)
(2)
              -
•      (Invariant): C[T], C is invariant on T
       Tsub Tsup T                         C[Tsub] C[Tsup]    C[T]

•      (Covariant): C[+T], C is covariant on T
       Tsub T                C[Tsub]      C[T]

•      (Contrava&ant): C[‐T], C is contravariant on T
       Tsup T              C[Tsup]       C[T]



    Java                                                ?
    Scala                                        +/-
(2)
class Animal {}
class Dog extends Animal {}
class Fox extends Animal {}


•          Animal                      Animal
class Xian<T> {} // Java                        class Xian[+T]   //

void isAnimalXian(Xian<? extends Animal> in)    def isAnimalXian(in: Xian[Animal])

isAnimalXian(new Xian<Dog>())                   isAnimalXian(new Xian[Dog])
isAnimalXian(new Xian<Fox>())                   isAnimalXian(new Xian[Fox])




•          Dog                  Dog
class Xian<T> {} // Java                        class Xian[-T]   //

void isDogXian(Xian<? super Dog> in)            def isDogXian(in: Xian[Dog])

isDogXian(new Xian[Animal])                     isDogXian(new Xian[Animal])
vs
•
trait Pair[K, V] {                      class PairImpl extends Pair[Dog, Fox] {
  def get(key: K): V                      def get(key: Dog): Fox
  def set(key: K, value: V)               def put(key: Dog, value: Fox)
}                                       }

                                                 =>


•                                                 +                    +
trait Pair {                            class PairImpl extends Pair {
  type K // deferred type                 type K = Dog
  type V // deferred type                 type V = Fox

    def get(key: K): V                      def get(key: K): V
    def set(key: K, value: V)               def set(key: K, value: V)
}                                       }

                                            =>
•          =>     /
•          =>                 type StrToList = HashMap[String, List[String]]
Trait Structural Type
• Trait:     +              =>
• Structural Type:
                                            Type
trait Subject {
  type Observer = {def update(subject: Subject)} // type member

    private var observers = List[Observer]()   // field
    def addObserver(observer: Observer) = observers ::= observer
    def notifyObservers = observers foreach (_.update(this))
}

class Price(var value: Double) {def setValue(v: Double) = value = v}


                                                                  Java Interface
                                                                 Trait
val observablePrice = new Price(10) with Subject {
  override def setValue(v: Double) = {
    super.setValue(v); notifyObservers
  }
}

observablePrice.addObserver(new AnyRef {              update(Subject)      Observer
     def update(subject: Subject) {
       println("price changed")
    }
  })
Trait Self Type
•
    •                    Class                 Trait: OilPrice extends Price with Subject with Market with ....
    •
    •               (Self Type)


trait Subject {self: Price =>
  type Observer = {def update(subject: Price)} // type member

    private var observers = List[Observer]()   // field
                                                                                                                  this   Subject
    def addObserver(observer: Observer) = observers ::= observer
    def notifyObservers = observers foreach (_.update(this))
}

observablePrice.addObserver(new AnyRef { // only need a update(Any) method
     def update(subject: Price) {
       println("price changed to " + subject.value)
     }
  })

• Self Type:
    •       Trait
    •                                        class trait
    •       self       Trait super                   this      self                  self
    •                                Trait
        •
        •                                          class              trait (                   Class      )
apply
•           apply                   <instance>(args)   <instance>.apply(args)
•   apply                     Class
    class Price(var value: Int) {
      def apply() = value // ‘def apply = value’, without ’()’ is bad idea
    }

    object Price {
      def apply(v: Int) = new Price(v)
    }

    val p = Price(10)
    p           // Price@565f0e7d
    p()         // 10
    Price(10)() // 10

•   apply       Scala
    val list = List(1, 2, 3)         // List.apply[A](xs: A*)
    val array = Array("a", "b", "c") // Array.apply[T](xs: T*)
    val map = Map("a" -> 1,
                  "b" -> 2,
                  "c" -> 3) // MapFactory.apply[A, B](elems: (A, B)*)

    array(0) // array.apply(index): "a"
    map("a") // map.apply(key): 1
•   Java Switch                  (          Java7) Scala
    val str = "abcdef"
    str.toSeq match {
      case Seq('a', 'b', rest@_*) => println(rest) // cdef
      case _ => println("no match")
    }

    var any: Any = _
    any match {
      case "scala" | "java" => "string"
      case i: Int if i > 10 => "int > 10"
      case `str` => "abcdef"
      case _: String => "string type"
      case hd :: tail => "List"
      case _ => "other"
    }

    case class Address(coutry: String, city: String, street: String, no: Int)
    case class Person(name: String, age: Int, address: Address)

    val p = Person("Wang wu", 12, Address("China", "Beijing", "Chang'an", 10))

    p match {
      case Person(name, age, Address(coutry, city, street, no)) =>
        println(name + "|" + coutry + "|" + city + "|" + street + "|" + no)
    }
Scala
• Existential type (    Java   )
• Implicit type * (                              )
• val, var, lazy val (                       )
• Partial function * (                               )
• Primary constructor (                          apply)
• Accessor properties (Why getter, setter?        )
• XML Process (          )



*      DSL
(DSL     )
•   Actors
    class Ping(count: Int, pong: Actor) extends Actor {
      def act() {
        var pingsLeft = count - 1
        pong ! Ping
        while (true) {
          receive {                                                {...}
            case Pong =>
              if (pingsLeft % 1000 == 0)
                println("Pong”)
              if (pingsLeft > 0) {
                pong ! Ping
                pingsLeft -= 1
              } else {
                pong ! Stop
                exit()
              }}}}}
•   Bill Venners scalatest
    class StackSpec extends FlatSpec with ShouldMatchers {

        "A Stack" should "pop values in last-in-first-out order" in {
          val stack = new Stack[Int]
          stack.push(1)
          stack.push(2)
          stack.pop() should equal (2)                          should
          stack.pop() should equal (1)
        }

        it should "throw NoSuchElementException if an empty stack is popped" in {
          val emptyStack = new Stack[String]
          evaluating { emptyStack.pop() } should produce [NoSuchElementException]
        }
    }
Scala                   Java

Scala Java
• Scala            Java
   • Array
• Scala                Java       Java
   •          object
• Scala
   • Actors   Packrat Parser




                          Scala
Scala        Java


• Scala
•       Java         Scala(    nio )
•       Scala   (   liftweb)
• IDE
IDE

• IntelliJ Idea
  •5
  •

• Eclipse
  •       Sean McDirmid
  •       1              (Miles Sabin)
  • Scala             Martin IDE


• NetBeans
  •                (dcaoyuan)
  • 2007   LL(K)
  • 2008         PEGs
  • 2008         Scala              Hacking NetBeans Innovation Grant
  • 2009 8           Scala    Scala             Martin IDE
IDE               -NetBeans
•
    •
    •
    •
    •
    •
    •
    •
    •
    •
    •         HTML
    •
    •
    • Java/Scala
    •
    •            import
    •
    •
    • Maven
•
    • NetBeans 6.7.x                     7000
    • NetBeans 6.8m2            Scala-2.8.0     beta
       http://wiki.netbeans.org/Scala68v1
Scala for NetBeans
Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

Scala for Java Programmers
Scala for Java ProgrammersScala for Java Programmers
Scala for Java ProgrammersEric Pederson
 
High Wizardry in the Land of Scala
High Wizardry in the Land of ScalaHigh Wizardry in the Land of Scala
High Wizardry in the Land of Scaladjspiewak
 
Scala collections api expressivity and brevity upgrade from java
Scala collections api  expressivity and brevity upgrade from javaScala collections api  expressivity and brevity upgrade from java
Scala collections api expressivity and brevity upgrade from javaIndicThreads
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Sanjeev_Knoldus
 
Practical scalaz
Practical scalazPractical scalaz
Practical scalazoxbow_lakes
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kirill Rozov
 
Scala for Java Developers - Intro
Scala for Java Developers - IntroScala for Java Developers - Intro
Scala for Java Developers - IntroDavid Copeland
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java DevelopersMichael Galpin
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaDerek Chen-Becker
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesTomer Gabel
 

Was ist angesagt? (20)

Scala for Java Programmers
Scala for Java ProgrammersScala for Java Programmers
Scala for Java Programmers
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
High Wizardry in the Land of Scala
High Wizardry in the Land of ScalaHigh Wizardry in the Land of Scala
High Wizardry in the Land of Scala
 
Scala collections api expressivity and brevity upgrade from java
Scala collections api  expressivity and brevity upgrade from javaScala collections api  expressivity and brevity upgrade from java
Scala collections api expressivity and brevity upgrade from java
 
Scala for curious
Scala for curiousScala for curious
Scala for curious
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
 
Scalaz
ScalazScalaz
Scalaz
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Practical scalaz
Practical scalazPractical scalaz
Practical scalaz
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
 
All about scala
All about scalaAll about scala
All about scala
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
Scala
ScalaScala
Scala
 
Scala for Java Developers - Intro
Scala for Java Developers - IntroScala for Java Developers - Intro
Scala for Java Developers - Intro
 
Scala - brief intro
Scala - brief introScala - brief intro
Scala - brief intro
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java Developers
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to Scala
 
Scala jargon cheatsheet
Scala jargon cheatsheetScala jargon cheatsheet
Scala jargon cheatsheet
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 

Ähnlich wie Scala-对Java的修正和超越

(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?Tomasz Wrobel
 
ハイブリッド言語Scalaを使う
ハイブリッド言語Scalaを使うハイブリッド言語Scalaを使う
ハイブリッド言語Scalaを使うbpstudy
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scalaXing
 
Scala: Functioneel programmeren in een object georiënteerde wereld
Scala: Functioneel programmeren in een object georiënteerde wereldScala: Functioneel programmeren in een object georiënteerde wereld
Scala: Functioneel programmeren in een object georiënteerde wereldWerner Hofstra
 
Type classes 101 - classification beyond inheritance
Type classes 101 - classification beyond inheritanceType classes 101 - classification beyond inheritance
Type classes 101 - classification beyond inheritanceAlexey Raga
 
Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)intelliyole
 
Scala or functional programming from a python developer's perspective
Scala or functional programming from a python developer's perspectiveScala or functional programming from a python developer's perspective
Scala or functional programming from a python developer's perspectivegabalese
 
2.1 recap from-day_one
2.1 recap from-day_one2.1 recap from-day_one
2.1 recap from-day_onefuturespective
 
Javascript Uncommon Programming
Javascript Uncommon ProgrammingJavascript Uncommon Programming
Javascript Uncommon Programmingjeffz
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed worldDebasish Ghosh
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々ScalaプログラミングTomoharu ASAMI
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basicswpgreenway
 
Scala introduction
Scala introductionScala introduction
Scala introductionvito jeng
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghStuart Roebuck
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOJorge Vásquez
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaVasil Remeniuk
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 

Ähnlich wie Scala-对Java的修正和超越 (20)

(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
Scala
ScalaScala
Scala
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
ハイブリッド言語Scalaを使う
ハイブリッド言語Scalaを使うハイブリッド言語Scalaを使う
ハイブリッド言語Scalaを使う
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
Scala: Functioneel programmeren in een object georiënteerde wereld
Scala: Functioneel programmeren in een object georiënteerde wereldScala: Functioneel programmeren in een object georiënteerde wereld
Scala: Functioneel programmeren in een object georiënteerde wereld
 
Type classes 101 - classification beyond inheritance
Type classes 101 - classification beyond inheritanceType classes 101 - classification beyond inheritance
Type classes 101 - classification beyond inheritance
 
Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)
 
Scala or functional programming from a python developer's perspective
Scala or functional programming from a python developer's perspectiveScala or functional programming from a python developer's perspective
Scala or functional programming from a python developer's perspective
 
2.1 recap from-day_one
2.1 recap from-day_one2.1 recap from-day_one
2.1 recap from-day_one
 
Meet scala
Meet scalaMeet scala
Meet scala
 
Javascript Uncommon Programming
Javascript Uncommon ProgrammingJavascript Uncommon Programming
Javascript Uncommon Programming
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed world
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIO
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius Valatka
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 

Kürzlich hochgeladen

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 

Kürzlich hochgeladen (20)

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 

Scala-对Java的修正和超越

  • 1. Java Scala 2009.10 SD2China Caoyuan (NetBeans Dream Team Memeber) http://blogtrader.net/dcaoyuan/
  • 2. JVM 123.toByte "1".toInt true.toString • val compare = (x: Int, y: Int) => x > y compare(1, 2) // result: Boolean = false • Java sta&c ( ) Scala object object Dog { val whatever = "dog" // static field in Java } class Dog { def callWhatever = Dog.whatever }
  • 3. val compare = (x: Int, y: Int) => x > y list sortWith compare • class AComparator { def compare(x: Int, y: Int) = x > y } list sortWith (new AComparator).compare • object annonymous extends scala.Function2[Int, Int, Boolean] { override def apply(x: Int, y: Int) = x > y } list sortWith annonymous • sta&c object ( )
  • 4. (1) • 1.+(1) ”.” ”()” 1 + 1 1.>(0) 1 > 0 (1 > 0).&(2 > 1) (1 > 0) & 2 > 1 stack.push(10) stack push 10 stack.pop stack pop • stack push { {...} val a = 1 val b = 2 a + b } • def !@#%^&*-<=>?|~:/ = println("noop") def √(x: Double) = Math.sqrt(x) val Π = Math.Pi val r = √(9*Π) • ‘<’, ‘>’ ’[’ ‘]’
  • 5. (2) • for for (i <- List(1, 2)) { println(i) } List(1, 2) foreach {i => println(i)} for (i <- List(1, 2)) yield { i + 10 } List(1, 2) map {i => i + 10} • // synchronized is function call instead of keyword def check = synchronized { // isInstanceOf is function call instead of keyword 100.isInstanceOf[String] } • stack.pop.asInstanceOf[Int] // (Integer) stack.pop() in Java
  • 6. return val r1 = { // return 3 val a = 1 val b = 2 a + b } val r2 = if (true) 1 else 2 val r3 = // return (): Unit for (i <- List(1, 2)) { println(i) } val r4 = // return List(11, 12) for (i <- List(1, 2)) yield { i + 10 } val r5 = // return java.io.File try { val f = new File("afile") f } catch { case ex: IOException => null }
  • 7. Scala ( ) = OO + FP
  • 8.
  • 9. (1) • Scala Any Any JVM • JVM (byte, short, char, int, long, float, double, boolean) void • Scala (Byte, Short, Char, Int, Long, Float, Double, Boolean) Unit AnyVal • JVM AnyRef (java.lang.Object) // Scala, Array 8 val arrayOfListOfString = new Array[List[String]](10) val arrayOfAny: Array[_] = Array(1, 2) // Java List<String>[] arrayOfListOfString = new ArrayList<String>[10] • Scala Null Nothing • JVM null Null AnyRef • Nothing Scala ( AnyVal AnyRef)
  • 10. (1)
  • 11. (2) - • (Invariant): C[T], C is invariant on T Tsub Tsup T C[Tsub] C[Tsup] C[T] • (Covariant): C[+T], C is covariant on T Tsub T C[Tsub] C[T] • (Contrava&ant): C[‐T], C is contravariant on T Tsup T C[Tsup] C[T] Java ? Scala +/-
  • 12. (2) class Animal {} class Dog extends Animal {} class Fox extends Animal {} • Animal Animal class Xian<T> {} // Java class Xian[+T] // void isAnimalXian(Xian<? extends Animal> in) def isAnimalXian(in: Xian[Animal]) isAnimalXian(new Xian<Dog>()) isAnimalXian(new Xian[Dog]) isAnimalXian(new Xian<Fox>()) isAnimalXian(new Xian[Fox]) • Dog Dog class Xian<T> {} // Java class Xian[-T] // void isDogXian(Xian<? super Dog> in) def isDogXian(in: Xian[Dog]) isDogXian(new Xian[Animal]) isDogXian(new Xian[Animal])
  • 13. vs • trait Pair[K, V] { class PairImpl extends Pair[Dog, Fox] { def get(key: K): V def get(key: Dog): Fox def set(key: K, value: V) def put(key: Dog, value: Fox) } } => • + + trait Pair { class PairImpl extends Pair { type K // deferred type type K = Dog type V // deferred type type V = Fox def get(key: K): V def get(key: K): V def set(key: K, value: V) def set(key: K, value: V) } } => • => / • => type StrToList = HashMap[String, List[String]]
  • 14. Trait Structural Type • Trait: + => • Structural Type: Type trait Subject { type Observer = {def update(subject: Subject)} // type member private var observers = List[Observer]() // field def addObserver(observer: Observer) = observers ::= observer def notifyObservers = observers foreach (_.update(this)) } class Price(var value: Double) {def setValue(v: Double) = value = v} Java Interface Trait val observablePrice = new Price(10) with Subject { override def setValue(v: Double) = { super.setValue(v); notifyObservers } } observablePrice.addObserver(new AnyRef { update(Subject) Observer def update(subject: Subject) { println("price changed") } })
  • 15. Trait Self Type • • Class Trait: OilPrice extends Price with Subject with Market with .... • • (Self Type) trait Subject {self: Price => type Observer = {def update(subject: Price)} // type member private var observers = List[Observer]() // field this Subject def addObserver(observer: Observer) = observers ::= observer def notifyObservers = observers foreach (_.update(this)) } observablePrice.addObserver(new AnyRef { // only need a update(Any) method def update(subject: Price) { println("price changed to " + subject.value) } }) • Self Type: • Trait • class trait • self Trait super this self self • Trait • • class trait ( Class )
  • 16. apply • apply <instance>(args) <instance>.apply(args) • apply Class class Price(var value: Int) { def apply() = value // ‘def apply = value’, without ’()’ is bad idea } object Price { def apply(v: Int) = new Price(v) } val p = Price(10) p // Price@565f0e7d p() // 10 Price(10)() // 10 • apply Scala val list = List(1, 2, 3) // List.apply[A](xs: A*) val array = Array("a", "b", "c") // Array.apply[T](xs: T*) val map = Map("a" -> 1, "b" -> 2, "c" -> 3) // MapFactory.apply[A, B](elems: (A, B)*) array(0) // array.apply(index): "a" map("a") // map.apply(key): 1
  • 17. Java Switch ( Java7) Scala val str = "abcdef" str.toSeq match { case Seq('a', 'b', rest@_*) => println(rest) // cdef case _ => println("no match") } var any: Any = _ any match { case "scala" | "java" => "string" case i: Int if i > 10 => "int > 10" case `str` => "abcdef" case _: String => "string type" case hd :: tail => "List" case _ => "other" } case class Address(coutry: String, city: String, street: String, no: Int) case class Person(name: String, age: Int, address: Address) val p = Person("Wang wu", 12, Address("China", "Beijing", "Chang'an", 10)) p match { case Person(name, age, Address(coutry, city, street, no)) => println(name + "|" + coutry + "|" + city + "|" + street + "|" + no) }
  • 18. Scala • Existential type ( Java ) • Implicit type * ( ) • val, var, lazy val ( ) • Partial function * ( ) • Primary constructor ( apply) • Accessor properties (Why getter, setter? ) • XML Process ( ) * DSL
  • 19. (DSL ) • Actors class Ping(count: Int, pong: Actor) extends Actor { def act() { var pingsLeft = count - 1 pong ! Ping while (true) { receive { {...} case Pong => if (pingsLeft % 1000 == 0) println("Pong”) if (pingsLeft > 0) { pong ! Ping pingsLeft -= 1 } else { pong ! Stop exit() }}}}} • Bill Venners scalatest class StackSpec extends FlatSpec with ShouldMatchers { "A Stack" should "pop values in last-in-first-out order" in { val stack = new Stack[Int] stack.push(1) stack.push(2) stack.pop() should equal (2) should stack.pop() should equal (1) } it should "throw NoSuchElementException if an empty stack is popped" in { val emptyStack = new Stack[String] evaluating { emptyStack.pop() } should produce [NoSuchElementException] } }
  • 20. Scala Java Scala Java • Scala Java • Array • Scala Java Java • object • Scala • Actors Packrat Parser Scala
  • 21. Scala Java • Scala • Java Scala( nio ) • Scala ( liftweb) • IDE
  • 22. IDE • IntelliJ Idea •5 • • Eclipse • Sean McDirmid • 1 (Miles Sabin) • Scala Martin IDE • NetBeans • (dcaoyuan) • 2007 LL(K) • 2008 PEGs • 2008 Scala Hacking NetBeans Innovation Grant • 2009 8 Scala Scala Martin IDE
  • 23. IDE -NetBeans • • • • • • • • • • • HTML • • • Java/Scala • • import • • • Maven • • NetBeans 6.7.x 7000 • NetBeans 6.8m2 Scala-2.8.0 beta http://wiki.netbeans.org/Scala68v1
  • 25. Q&A