Scala

  • 1,632 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,632
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
42
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Scala Sparkle12年3月1日星期四
  • 2. 大纲 Scala是什么 语法(特色) 类库和工具 缺点12年3月1日星期四
  • 3. Scala是什么12年3月1日星期四
  • 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. 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. Scala是……12年3月1日星期四
  • 7. Scala是…… 又⼀一个JVM上的语言12年3月1日星期四
  • 8. Scala是…… 又⼀一个JVM上的语言 强类型12年3月1日星期四
  • 9. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言12年3月1日星期四
  • 10. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式12年3月1日星期四
  • 11. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式 面向对象12年3月1日星期四
  • 12. Scala是…… 又⼀一个JVM上的语言 强类型 “动态的”静态语言 函数式 面向对象 并发12年3月1日星期四
  • 13. 谁在用 Twitter LinkedIn FourSquare Xerox、Sony、Siemens12年3月1日星期四
  • 14. 语法(特色)12年3月1日星期四
  • 15. Hello world! object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • 16. Hello world! 没有分号 object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • 17. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • 18. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } }12年3月1日星期四
  • 19. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def }12年3月1日星期四
  • 20. Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def } println12年3月1日星期四
  • 21. Hello world! object Test extends Application { ! println("Hello, world!") }12年3月1日星期四
  • 22. Hello world! object Test extends Application { ! println("Hello, world!") } extends12年3月1日星期四
  • 23. Hello world! object Test extends Application { ! println("Hello, world!") } extends 类内直接写代码12年3月1日星期四
  • 24. 简化12年3月1日星期四
  • 25. 简化 val i = 1.2.toInt12年3月1日星期四
  • 26. 简化 val i = 1.2.toInt val list = List(1, 2, 3)12年3月1日星期四
  • 27. 简化 val i = 1.2.toInt val list = List(1, 2, 3) val map = Map("Guangzhou" -> "GZ", "Shenzhen" -> "SZ")12年3月1日星期四
  • 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. 简化 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. 简化 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. 函数式编程 list.filter(e => e % 2 == 0)12年3月1日星期四
  • 32. 函数式编程 list.filter(e => e % 2 == 0) list.filter(_ % 2 == 0)12年3月1日星期四
  • 33. open class(ruby) class String  def foo  "foo"  end end puts "".foo # prints "foo"12年3月1日星期四
  • 34. 为什么我们需要open class12年3月1日星期四
  • 35. 为什么我们需要open class StringUtils.isBlank("some str")12年3月1日星期四
  • 36. 为什么我们需要open class StringUtils.isBlank("some str") "some str".isBlank12年3月1日星期四
  • 37. 为什么我们需要open class StringUtils.isBlank("some str") "some str".isBlank myObj should not contains(13)12年3月1日星期四
  • 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. 隐式转换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. open class的效果让大家觉得Scala是动态语言,但选择 隐式转换来实现,正好证明了Scala是静态语言12年3月1日星期四
  • 41. Trait class Animal {} trait CanFly { def fly { println("fly") } } class Bird extends Animal with CanFly {}12年3月1日星期四
  • 42. Trait class Animal {} trait CanFly { def fly { Mixin,类似多集成 println("fly") 接口和实现⼀一起出现 } 是什么和拥有什么功能 } class Bird extends Animal with CanFly {}12年3月1日星期四
  • 43. Trait class Fish {} trait CanFly { def fly { println("fly") } } val flyFish = new Fish with CanFly12年3月1日星期四
  • 44. Actors val myActor = actor { loop { react { case "Send" => { println("Get") } } } } myActor ! "Send"12年3月1日星期四
  • 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. XML支持 println(<date>{new java.util.Date()}</date>)12年3月1日星期四
  • 47. 并发12年3月1日星期四
  • 48. 是什么让我们觉得⼀一个语言是并发的语言12年3月1日星期四
  • 49. 是什么让我们觉得Go和Erlang是并发语 言,而C++和Python不是12年3月1日星期四
  • 50. 是什么让我们觉得Go和Erlang是并发语 言,而C++和Python不是 Go内置Channel和Goroutine Erlang的⼀一次赋值、轻量级进程12年3月1日星期四
  • 51. 是什么让我们觉得Scala 是并发语言 val case class 模式匹配 大量的immutable类 Actors Akka12年3月1日星期四
  • 52. 与Java互相调用 Scala能调用绝大部分的Java JavaConverters、JavaConversions Java调用Scala独有的东西比较困难12年3月1日星期四
  • 53. 类库和工具12年3月1日星期四
  • 54. Lift full stack view first12年3月1日星期四
  • 55. Play! Play Scala12年3月1日星期四
  • 56. Play! Play Scala Play 2.0 !!12年3月1日星期四
  • 57. Akka STM & Transactors Fault-tolerance Transparent Remoting Scala & Java API12年3月1日星期四
  • 58. sbt 构建工具12年3月1日星期四
  • 59. 更多 Xitrum Scalatra、Scalate ScalaTest、specs2 Squeryl12年3月1日星期四
  • 60. IDE支持12年3月1日星期四
  • 61. 缺点12年3月1日星期四
  • 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. 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. 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. jetbrains出了新JVM语言Kotlin后,Scala社区终于开始 正视Scala太复杂的问题了 http://groups.google.com/group/scalacn/browse_thread/thread/cbbe5997009db91912年3月1日星期四
  • 66. 缺点 编译速度 二进制不兼容 语法越来越复杂 太少人使用,招聘开发人员的问题12年3月1日星期四
  • 67. 如何开始使用12年3月1日星期四
  • 68. 如何开始使用 使用最新版12年3月1日星期四
  • 69. 如何开始使用 使用最新版 先别用高级特性12年3月1日星期四
  • 70. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试12年3月1日星期四
  • 71. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移12年3月1日星期四
  • 72. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt12年3月1日星期四
  • 73. 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt idea scala插件12年3月1日星期四
  • 74. 谢谢 weibo&twitter: sparklezeng email: popeast@gmail.com website: http://weavesky.com12年3月1日星期四