Scala                     Sparkle12年3月1日星期四
大纲             Scala是什么             语法(特色)             类库和工具             缺点12年3月1日星期四
Scala是什么12年3月1日星期四
"Which Programming Language would you use *now*  on top of JVM, except Java?". The answer was     surprisingly fast and ve...
I can honestly say if someone had shown me    theProgramming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners ...
Scala是……12年3月1日星期四
Scala是……             又⼀一个JVM上的语言12年3月1日星期四
Scala是……             又⼀一个JVM上的语言             强类型12年3月1日星期四
Scala是……             又⼀一个JVM上的语言             强类型             “动态的”静态语言12年3月1日星期四
Scala是……             又⼀一个JVM上的语言             强类型             “动态的”静态语言             函数式12年3月1日星期四
Scala是……             又⼀一个JVM上的语言             强类型             “动态的”静态语言             函数式             面向对象12年3月1日星期四
Scala是……             又⼀一个JVM上的语言             强类型             “动态的”静态语言             函数式             面向对象             并发12年3...
谁在用             Twitter             LinkedIn             FourSquare             Xerox、Sony、Siemens12年3月1日星期四
语法(特色)12年3月1日星期四
Hello world!               object Test {               ! def main(args: Array[String]) {               ! ! println("Hello,...
Hello world!             没有分号     object Test {                      ! def main(args: Array[String]) {                    ...
Hello world!             没有分号     object Test {             定义后置                      ! def main(args: Array[String]) {   ...
Hello world!             没有分号       object Test {             定义后置                        ! def main(args: Array[String]) ...
Hello world!             没有分号       object Test {             定义后置                        ! def main(args: Array[String]) ...
Hello world!             没有分号        object Test {             定义后置                         ! def main(args: Array[String]...
Hello world!               object Test extends Application {               ! println("Hello, world!")               }12年3月...
Hello world!                         object Test extends Application {                         ! println("Hello, world!") ...
Hello world!                         object Test extends Application {                         ! println("Hello, world!") ...
简化12年3月1日星期四
简化             val i = 1.2.toInt12年3月1日星期四
简化             val i = 1.2.toInt             val list = List(1, 2, 3)12年3月1日星期四
简化             val i = 1.2.toInt             val list = List(1, 2, 3)             val map = Map("Guangzhou" -> "GZ",      ...
简化             val i = 1.2.toInt             val list = List(1, 2, 3)             val map = Map("Guangzhou" -> "GZ",      ...
简化             val i = 1.2.toInt             val list = List(1, 2, 3)             val map = Map("Guangzhou" -> "GZ",      ...
简化             val i = 1.2.toInt             val list = List(1, 2, 3)             val map = Map("Guangzhou" -> "GZ",      ...
函数式编程             list.filter(e => e % 2 == 0)12年3月1日星期四
函数式编程             list.filter(e => e % 2 == 0)               list.filter(_ % 2 == 0)12年3月1日星期四
open class(ruby)             class String              def foo              "foo"              end             end        ...
为什么我们需要open class12年3月1日星期四
为什么我们需要open class             StringUtils.isBlank("some str")12年3月1日星期四
为什么我们需要open class             StringUtils.isBlank("some str")                   "some str".isBlank12年3月1日星期四
为什么我们需要open class             StringUtils.isBlank("some str")                   "some str".isBlank             myObj shoul...
隐式转换class MyString(str: String) {  def isBlank = str.trim.length == 0}implicit def myStringWrapper(str: String) = newMyStr...
隐式转换class MyString(str: String) {  def isBlank = str.trim.length == 0}implicit def myStringWrapper(str: String) = newMyStr...
open class的效果让大家觉得Scala是动态语言,但选择   隐式转换来实现,正好证明了Scala是静态语言12年3月1日星期四
Trait               class Animal {}               trait CanFly {                 def fly {                   println("fly") ...
Trait                           class Animal {}                           trait CanFly {                             def fl...
Trait             class Fish {}             trait CanFly {               def fly {                 println("fly")           ...
Actors             val myActor = actor {               loop {                 react {                   case "Send" => {  ...
模式匹配             def matchTest(x: Any) = x match {               case 1 => "number one"               case y: Int if y > 0...
XML支持             println(<date>{new java.util.Date()}</date>)12年3月1日星期四
并发12年3月1日星期四
是什么让我们觉得⼀一个语言是并发的语言12年3月1日星期四
是什么让我们觉得Go和Erlang是并发语            言,而C++和Python不是12年3月1日星期四
是什么让我们觉得Go和Erlang是并发语            言,而C++和Python不是             Go内置Channel和Goroutine             Erlang的⼀一次赋值、轻量级进程12年3月1日星期四
是什么让我们觉得Scala                是并发语言             val             case class             模式匹配             大量的immutable类      ...
与Java互相调用             Scala能调用绝大部分的Java             JavaConverters、JavaConversions             Java调用Scala独有的东西比较困难12年3月1日...
类库和工具12年3月1日星期四
Lift             full stack             view first12年3月1日星期四
Play!             Play Scala12年3月1日星期四
Play!             Play Scala             Play 2.0 !!12年3月1日星期四
Akka             STM & Transactors             Fault-tolerance             Transparent Remoting             Scala & Java A...
sbt             构建工具12年3月1日星期四
更多             Xitrum             Scalatra、Scalate             ScalaTest、specs2             Squeryl12年3月1日星期四
IDE支持12年3月1日星期四
缺点12年3月1日星期四
It took about 15 hours to recreate the publishing  daemon in Clojure and get it to pass all our tests.     Today we ran a ...
The e-mail confirms that Yammer is moving its basicinfrastructure stack from Scala back to Java, owing     to issues with c...
flatMap [B, That] (f: (A)        Traversable[B])(implicit bf:             CanBuildFrom[List[A], B, That]) : That           ...
jetbrains出了新JVM语言Kotlin后,Scala社区终于开始           正视Scala太复杂的问题了             http://groups.google.com/group/scalacn/browse_th...
缺点             编译速度             二进制不兼容             语法越来越复杂             太少人使用,招聘开发人员的问题12年3月1日星期四
如何开始使用12年3月1日星期四
如何开始使用             使用最新版12年3月1日星期四
如何开始使用             使用最新版             先别用高级特性12年3月1日星期四
如何开始使用             使用最新版             先别用高级特性             小工具、单元测试12年3月1日星期四
如何开始使用             使用最新版             先别用高级特性             小工具、单元测试             逐步迁移12年3月1日星期四
如何开始使用             使用最新版             先别用高级特性             小工具、单元测试             逐步迁移             sbt12年3月1日星期四
如何开始使用             使用最新版             先别用高级特性             小工具、单元测试             逐步迁移             sbt             idea scala插...
谢谢             weibo&twitter: sparklezeng             email: popeast@gmail.com             website: http://weavesky.com12年...
Upcoming SlideShare
Loading in...5
×

Scala

1,786

Published on

sparkle zeng 在珠三角技术沙龙 2012 年 2 月广州场新语言专场上的幻灯。

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

No Downloads
Views
Total Views
1,786
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
53
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Scala

  1. 1. Scala Sparkle12年3月1日星期四
  2. 2. 大纲 Scala是什么 语法(特色) 类库和工具 缺点12年3月1日星期四
  3. 3. Scala是什么12年3月1日星期四
  4. 4. "Which Programming Language would you use *now* on top of JVM, except Java?". The answer was surprisingly fast and very clear: - Scala. http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming12年3月1日星期四
  5. 5. I can honestly say if someone had shown me theProgramming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 Id probably have never created Groovy. http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html12年3月1日星期四
  6. 6. Scala是……12年3月1日星期四
  7. 7. Scala是…… 又⼀一个JVM上的语言12年3月1日星期四
  8. 8. Scala是…… 又⼀一个JVM上的语言 强类型12年3月1日星期四
  9. 9. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言12年3月1日星期四
  10. 10. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式12年3月1日星期四
  11. 11. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式 面向对象12年3月1日星期四
  12. 12. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式 面向对象 并发12年3月1日星期四
  13. 13. 谁在用 Twitter LinkedIn FourSquare Xerox、Sony、Siemens12年3月1日星期四
  14. 14. 语法(特色)12年3月1日星期四
  15. 15. Hello world! object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  16. 16. Hello world! 没有分号 object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  17. 17. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  18. 18. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } }12年3月1日星期四
  19. 19. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def }12年3月1日星期四
  20. 20. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def } println12年3月1日星期四
  21. 21. Hello world! object Test extends Application { ! println("Hello, world!") }12年3月1日星期四
  22. 22. Hello world! object Test extends Application { ! println("Hello, world!") } extends12年3月1日星期四
  23. 23. Hello world! object Test extends Application { ! println("Hello, world!") } extends 类内直接写代码12年3月1日星期四
  24. 24. 简化12年3月1日星期四
  25. 25. 简化 val i = 1.2.toInt12年3月1日星期四
  26. 26. 简化 val i = 1.2.toInt val list = List(1, 2, 3)12年3月1日星期四
  27. 27. 简化 val i = 1.2.toInt val list = List(1, 2, 3) val map = Map("Guangzhou" -> "GZ", "Shenzhen" -> "SZ")12年3月1日星期四
  28. 28. 简化 val i = 1.2.toInt val list = List(1, 2, 3) val map = Map("Guangzhou" -> "GZ", "Shenzhen" -> "SZ") class MyClass(x: Int, y: Int) {}12年3月1日星期四
  29. 29. 简化 val i = 1.2.toInt val list = List(1, 2, 3) val map = Map("Guangzhou" -> "GZ", "Shenzhen" -> "SZ") class MyClass(x: Int, y: Int) {} list.exists(_ == 2) //true12年3月1日星期四
  30. 30. 简化 val i = 1.2.toInt val list = List(1, 2, 3) val map = Map("Guangzhou" -> "GZ", "Shenzhen" -> "SZ") class MyClass(x: Int, y: Int) {} list.exists(_ == 2) //true val (a, b, _) = (x, y, z)12年3月1日星期四
  31. 31. 函数式编程 list.filter(e => e % 2 == 0)12年3月1日星期四
  32. 32. 函数式编程 list.filter(e => e % 2 == 0) list.filter(_ % 2 == 0)12年3月1日星期四
  33. 33. open class(ruby) class String  def foo  "foo"  end end puts "".foo # prints "foo"12年3月1日星期四
  34. 34. 为什么我们需要open class12年3月1日星期四
  35. 35. 为什么我们需要open class StringUtils.isBlank("some str")12年3月1日星期四
  36. 36. 为什么我们需要open class StringUtils.isBlank("some str") "some str".isBlank12年3月1日星期四
  37. 37. 为什么我们需要open class StringUtils.isBlank("some str") "some str".isBlank myObj should not contains(13)12年3月1日星期四
  38. 38. 隐式转换class MyString(str: String) { def isBlank = str.trim.length == 0}implicit def myStringWrapper(str: String) = newMyString(str)println("some str".isBlank)12年3月1日星期四
  39. 39. 隐式转换class MyString(str: String) { def isBlank = str.trim.length == 0}implicit def myStringWrapper(str: String) = newMyString(str)println("some str".isBlank) println(new MyString("some str").isBlank)12年3月1日星期四
  40. 40. open class的效果让大家觉得Scala是动态语言,但选择 隐式转换来实现,正好证明了Scala是静态语言12年3月1日星期四
  41. 41. Trait class Animal {} trait CanFly { def fly { println("fly") } } class Bird extends Animal with CanFly {}12年3月1日星期四
  42. 42. Trait class Animal {} trait CanFly { def fly { Mixin,类似多集成 println("fly") 接口和实现⼀一起出现 } 是什么和拥有什么功能 } class Bird extends Animal with CanFly {}12年3月1日星期四
  43. 43. Trait class Fish {} trait CanFly { def fly { println("fly") } } val flyFish = new Fish with CanFly12年3月1日星期四
  44. 44. Actors val myActor = actor { loop { react { case "Send" => { println("Get") } } } } myActor ! "Send"12年3月1日星期四
  45. 45. 模式匹配 def matchTest(x: Any) = x match { case 1 => "number one" case y: Int if y > 0 => y + 1 case head :: tail => tail case Send(a, _) => a case ("Send", _, b: String) => b case _ => x }12年3月1日星期四
  46. 46. XML支持 println(<date>{new java.util.Date()}</date>)12年3月1日星期四
  47. 47. 并发12年3月1日星期四
  48. 48. 是什么让我们觉得⼀一个语言是并发的语言12年3月1日星期四
  49. 49. 是什么让我们觉得Go和Erlang是并发语 言,而C++和Python不是12年3月1日星期四
  50. 50. 是什么让我们觉得Go和Erlang是并发语 言,而C++和Python不是 Go内置Channel和Goroutine Erlang的⼀一次赋值、轻量级进程12年3月1日星期四
  51. 51. 是什么让我们觉得Scala 是并发语言 val case class 模式匹配 大量的immutable类 Actors Akka12年3月1日星期四
  52. 52. 与Java互相调用 Scala能调用绝大部分的Java JavaConverters、JavaConversions Java调用Scala独有的东西比较困难12年3月1日星期四
  53. 53. 类库和工具12年3月1日星期四
  54. 54. Lift full stack view first12年3月1日星期四
  55. 55. Play! Play Scala12年3月1日星期四
  56. 56. Play! Play Scala Play 2.0 !!12年3月1日星期四
  57. 57. Akka STM & Transactors Fault-tolerance Transparent Remoting Scala & Java API12年3月1日星期四
  58. 58. sbt 构建工具12年3月1日星期四
  59. 59. 更多 Xitrum Scalatra、Scalate ScalaTest、specs2 Squeryl12年3月1日星期四
  60. 60. IDE支持12年3月1日星期四
  61. 61. 缺点12年3月1日星期四
  62. 62. It took about 15 hours to recreate the publishing daemon in Clojure and get it to pass all our tests. Today we ran a "soak test" publishing nearly 300,000 profiles in one run. The Scala code would fail with OoM exceptions if we hit it with 50,000 profiles in one run (sometimes less). http://groups.google.com/group/clojure/browse_thread/thread/b18f9006c068f0a012年3月1日星期四
  63. 63. The e-mail confirms that Yammer is moving its basicinfrastructure stack from Scala back to Java, owing to issues with complexity and performance. http://www.infoq.com/news/2011/11/yammer-scala12年3月1日星期四
  64. 64. flatMap [B, That] (f: (A) Traversable[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That http://goodstuff.im/yes-virginia-scala-is-hard12年3月1日星期四
  65. 65. jetbrains出了新JVM语言Kotlin后,Scala社区终于开始 正视Scala太复杂的问题了 http://groups.google.com/group/scalacn/browse_thread/thread/cbbe5997009db91912年3月1日星期四
  66. 66. 缺点 编译速度 二进制不兼容 语法越来越复杂 太少人使用,招聘开发人员的问题12年3月1日星期四
  67. 67. 如何开始使用12年3月1日星期四
  68. 68. 如何开始使用 使用最新版12年3月1日星期四
  69. 69. 如何开始使用 使用最新版 先别用高级特性12年3月1日星期四
  70. 70. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试12年3月1日星期四
  71. 71. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移12年3月1日星期四
  72. 72. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt12年3月1日星期四
  73. 73. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt idea scala插件12年3月1日星期四
  74. 74. 谢谢 weibo&twitter: sparklezeng email: popeast@gmail.com website: http://weavesky.com12年3月1日星期四
  1. A particular slide catching your eye?

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

×