Scala
Upcoming SlideShare
Loading in...5
×
 

Scala

on

  • 1,728 views

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

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

Statistics

Views

Total Views
1,728
Views on SlideShare
1,572
Embed Views
156

Actions

Likes
6
Downloads
42
Comments
0

4 Embeds 156

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

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

Scala Scala Presentation Transcript

  • Scala Sparkle12年3月1日星期四
  • 大纲 Scala是什么 语法(特色) 类库和工具 缺点12年3月1日星期四
  • Scala是什么12年3月1日星期四 View slide
  • "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日星期四 View slide
  • 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日星期四
  • 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月1日星期四
  • 谁在用 Twitter LinkedIn FourSquare Xerox、Sony、Siemens12年3月1日星期四
  • 语法(特色)12年3月1日星期四
  • Hello world! object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • Hello world! 没有分号 object Test { ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") ! } }12年3月1日星期四
  • Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } }12年3月1日星期四
  • Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def }12年3月1日星期四
  • Hello world! 没有分号 object Test { 定义后置 ! def main(args: Array[String]) { ! ! println("Hello, world!") object ! } def } println12年3月1日星期四
  • Hello world! object Test extends Application { ! println("Hello, world!") }12年3月1日星期四
  • Hello world! object Test extends Application { ! println("Hello, world!") } extends12年3月1日星期四
  • Hello world! object Test extends Application { ! println("Hello, world!") } extends 类内直接写代码12年3月1日星期四
  • 简化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", "Shenzhen" -> "SZ")12年3月1日星期四
  • 简化 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日星期四
  • 简化 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日星期四
  • 简化 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日星期四
  • 函数式编程 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 puts "".foo # prints "foo"12年3月1日星期四
  • 为什么我们需要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 should not contains(13)12年3月1日星期四
  • 隐式转换class MyString(str: String) { def isBlank = str.trim.length == 0}implicit def myStringWrapper(str: String) = newMyString(str)println("some str".isBlank)12年3月1日星期四
  • 隐式转换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日星期四
  • open class的效果让大家觉得Scala是动态语言,但选择 隐式转换来实现,正好证明了Scala是静态语言12年3月1日星期四
  • Trait class Animal {} trait CanFly { def fly { println("fly") } } class Bird extends Animal with CanFly {}12年3月1日星期四
  • Trait class Animal {} trait CanFly { def fly { Mixin,类似多集成 println("fly") 接口和实现⼀一起出现 } 是什么和拥有什么功能 } class Bird extends Animal with CanFly {}12年3月1日星期四
  • Trait class Fish {} trait CanFly { def fly { println("fly") } } val flyFish = new Fish with CanFly12年3月1日星期四
  • Actors val myActor = actor { loop { react { case "Send" => { println("Get") } } } } myActor ! "Send"12年3月1日星期四
  • 模式匹配 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日星期四
  • 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类 Actors Akka12年3月1日星期四
  • 与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 API12年3月1日星期四
  • 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 "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日星期四
  • 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日星期四
  • 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日星期四
  • jetbrains出了新JVM语言Kotlin后,Scala社区终于开始 正视Scala太复杂的问题了 http://groups.google.com/group/scalacn/browse_thread/thread/cbbe5997009db91912年3月1日星期四
  • 缺点 编译速度 二进制不兼容 语法越来越复杂 太少人使用,招聘开发人员的问题12年3月1日星期四
  • 如何开始使用12年3月1日星期四
  • 如何开始使用 使用最新版12年3月1日星期四
  • 如何开始使用 使用最新版 先别用高级特性12年3月1日星期四
  • 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试12年3月1日星期四
  • 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移12年3月1日星期四
  • 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt12年3月1日星期四
  • 如何开始使用 使用最新版 先别用高级特性 小工具、单元测试 逐步迁移 sbt idea scala插件12年3月1日星期四
  • 谢谢 weibo&twitter: sparklezeng email: popeast@gmail.com website: http://weavesky.com12年3月1日星期四