如何开始scala

时间:2011-03-23 13:23:14

标签: scala jvm

我是.NET开发人员,我想稍微开阔眼界,看看现代趋势后决定尝试Scala。你能告诉我一个好的策略吗?我应该先学习Java吗?我应该阅读哪些资料或手册?是否有任何操作系统项目来练习Scala并在其上发展?

谢谢, 多米尼克

10 个答案:

答案 0 :(得分:27)

您可以通过访问Simply Scala获得第一印象,在那里您可以获得在线口译员。

绝对经典是Scala for Java Refugees,最初是为来自Java的人编写的,但考虑到C#/ Java的基础知识有多么相似,对你很有帮助。

您不需要首先学习Java,但需要安装Java运行时/开发工具包。

然后转到http://www.scala-lang.org/downloads并为您的操作系统下载相应的软件包(我总是喜欢Scala的每晚构建版本,它们比最新版本的版本更容易修复错误。)

之后,运行基本上“简单Scala离线”的Scala REPL(Simply Scala也使用了后面的Scala REPL)。甚至许多Java程序员也首先使用Scala REPL对事物进行原型设计。

如果您更喜欢书籍,我可以推荐Martin Odersky的Programming in Scala (2nd edition)(如果您从语言设计的角度出发并想要“参考书”)。还有其他像“Sc​​ala编程”这样可以说更适合初学者,但我个人发现“Scala编程”非常出色并且只用那本书学习了Scala。

启动Scala的一个好方法是使用集合类。 .NET最近添加了类似LINQ和扩展方法的东西,所以很容易为你找到它。

一个让你入门的小例子:

//Define a class with some properties
case class Person(name: String, var age: Int, spokenLanguages: String*)

//Create some persons
val joe = Person("Joe", 42, "English","French","Danish")
val doe = Person("Doe", 23, "English","German")
val don = Person("Don", 11, "Italian","French","Polish")
val bob = Person("Bob", 17, "German")

//Access a property
joe.name

//Don had his 12th birthday!
don.age = 12

//Put the persons into a list
val persons = List(joe, doe, don, bob)

//Divide the list into minors and adults
val (minors, adults) = persons.partition(_.age < 18)
//Get the total age of all persons
val personsTotalAge  = persons.map(_.age).sum
//Return a list with only those speaking English
val englishSpeakers  = persons.filter(_.spokenLanguages.contains("English"))
//Same as the example above.
val englishSpeakers2 = 
  for{ person   <- persons
       language <- person.spokenLanguages 
       if language == "English"
  } yield person

我不是那么流利的C#,但我相信很多事情可能与你相似。

Scala的XML支持的一些示例:

//The shoppingCart for breakfast
val shoppingCart = <list>
                     <item><name>Tomatoes</name><price>0.30</price><amount>4</amount></item>
                     <item><name>Eggs</name><price>0.15</price><amount>10</amount></item>
                     <item><name>Bread</name><price>2.20</price><amount>1</amount></item>
                   </list>

//How much does it cost?
val total = (shoppingCart \ "item").map(i => (i \ "price").text.toDouble * (i \ "amount").text.toDouble).sum

//This is a Symbol
val sym = 'SomeSymbol

//I'm too lazy to use Strings for XML! (Example for implicits)
implicit def symbol2string(symbol: Symbol) = symbol.name

//Now I can use Symbols too!
val total = (shoppingCart \ 'item).map(i => (i \ 'price).text.toDouble * (i \ 'amount).text.toDouble).sum

答案 1 :(得分:8)

您不需要先学习Java。你熟悉函数式编程吗?如果你是,你应该能够很快地跳进去。无论如何,这里有一些关于如何学习Scala的想法:

  • 获得一本好的参考书。我推荐Odersky,Spoon和Venners编写Scala编程。我发现它是最全面的Scala书之一。

  • 与学习任何新语言一样,尝试使用Scala编写几个小应用程序。如果你不是一个功能程序员,你可以用不同的范例编程,但现在没问题。尝试编写程序而不使用“var,(使用val代替)”而不是使用循环,并最大限度地减少状态变化。

  • 使用sbt构建程序。我有点犹豫要推荐这个,因为你必须学习一个新的工具来编写你的程序。但我觉得用Scala编写应用程序也很棒。许多Scala项目似乎都使用sbt。

  • 此外,请查看此评论和该主题,以帮助您转换到Scala。 Struggle against habits formed by Java when migrating to Scala

答案 2 :(得分:5)

Java作为一种语言不需要以scala开头(无论如何java本身与c#非常相似,或者实际上它是相反的......)。 但是,一旦你开始使用scala进行高效工作,你将会与许多java库进行交互,并了解java-world是一个更广泛的标准库,而不是.net-world,其中有很多您需要的东西直接在标准的.NET库中。你可以随时学习它们,但不是来自java背景,经验可能会让人感到压力。如果你开始学习java,那就是同样的事情.... 您可能需要学习的其他特定于Java的事情是关于泛型在JVM中功能要小得多,以及scala如何尝试解决此问题。

至于scala本身作为一种语言,来自.NET,你可以从阅读函数式编程的一些东西而不是学习java中获益更多。功能范例是我最初在scala方面最无知的部分,这让我在scala网站上找到的资源中了解示例代码时遇到的最大麻烦。

建立基础

  • 对于函数式编程,我建议阅读SICP(在线免费)。
  • 当你学习java时,试着看一下F#。它是一种很好的语言,它在.NET生态系统中有很好的文档和“生命”

学习scala

答案 3 :(得分:2)

如果你想学习Scala,学习Scala并随时学习你需要的Java将会更好。您不需要学习Java就可以开始使用Scala。

一个好的开始就是阅读这个问题,其中列出了目前可用的大部分Scala书籍。

https://stackoverflow.com/questions/3359852/scala-programming-book/3360308#3360308

答案 4 :(得分:2)

我认为您不需要了解Java才能开始使用Scala。尽管知道广泛的行程是有帮助的,因为我读过的大多数Scala文档都会引用Java特性或错误。

关于开源项目,您可以查看Github for scala projects。但是,大多数开源Scala项目往往都是框架。

关于书籍,我发现了Artima书,Scala编程和实用程序员,Scala编程,非常好。

答案 5 :(得分:2)

除了其他:暂时编写简单程序并完全忽略Scala的高级功能。只有掌握了基础知识,功能范式和类型系统,才能移动到那里。

答案 6 :(得分:2)

我建议你参加Martin Odersky的Coursera Functional Programming Principles in Scala。有视频讲座,作业甚至期末考试。

答案 7 :(得分:1)

Twitter(其中一位斯卡拉爱好者)最近推出了他们自己的scala完整教程 - Scala School。这是我向所有scala初学者推荐的精彩指南。

  斯卡拉学校是在Twitter上开始的一系列讲座准备的   经验丰富的工程师将成为高效的Scala程序员。 ......我们   认为最接近Scala的教学并不是最有意义的   它是一种改进的Java,但作为一种新语言。 Java的经验不是   预期。焦点将围绕翻译和   对象功能风格以及我们的编程风格   这里。重点将放在可维护性,清晰度上   表达式,并利用类型系统。

     

除了Scala REPL之外,大多数课程不需要任何软件。该   鼓励读者继续学习,走得更远!使用这些   以课程作为探索语言的起点。

答案 8 :(得分:0)

我目前正在开发一种不需要先前编程知识的方法。它将展示功能和命令式编程相结合的强度,并且非常容易理解。此外,这些帖子将涵盖最佳实践,并使用Scala解决日益困难的问题。

http://vigtig.it/blog/

你应该试一试,第2部分差不多完成了:)

答案 9 :(得分:0)

下载并安装Apache Maven。使用它来创建一个空白的Scala项目并编写经典的Scala hello world应用程序。这将要求您在Maven创建的项目目录中配置pom.xml文件。

然后一遍又一遍地运行mvn compile,纠正错误直到它编译完毕。

然后运行mvn package,直到您通过所有单元测试。

最后,运行mvn scala:run

一旦构建了一个真正的项目scala:run就可以选择吐出从shell脚本或批处理文件运行它所需的完整Java命令。