Scala
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Scala

  • 1,932 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,932
On Slideshare
1,776
From Embeds
156
Number of Embeds
4

Actions

Shares
Downloads
42
Comments
0
Likes
6

Embeds 156

http://nourlcn.ownlinux.net 121
http://feeds.feedburner.com 33
http://127.0.0.1 1
http://blog.ownlinux.net 1

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日星期四