我是.NET开发人员,我想稍微开阔眼界,看看现代趋势后决定尝试Scala。你能告诉我一个好的策略吗?我应该先学习Java吗?我应该阅读哪些资料或手册?是否有任何操作系统项目来练习Scala并在其上发展?
谢谢, 多米尼克
答案 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)(如果您从语言设计的角度出发并想要“参考书”)。还有其他像“Scala编程”这样可以说更适合初学者,但我个人发现“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网站上找到的资源中了解示例代码时遇到的最大麻烦。
建立基础
学习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的教学并不是最有意义的 它是一种改进的Java,但作为一种新语言。 Java的经验不是 预期。焦点将围绕翻译和 对象功能风格以及我们的编程风格 这里。重点将放在可维护性,清晰度上 表达式,并利用类型系统。除了Scala REPL之外,大多数课程不需要任何软件。该 鼓励读者继续学习,走得更远!使用这些 以课程作为探索语言的起点。
答案 8 :(得分:0)
我目前正在开发一种不需要先前编程知识的方法。它将展示功能和命令式编程相结合的强度,并且非常容易理解。此外,这些帖子将涵盖最佳实践,并使用Scala解决日益困难的问题。
你应该试一试,第2部分差不多完成了:)
答案 9 :(得分:0)
下载并安装Apache Maven。使用它来创建一个空白的Scala项目并编写经典的Scala hello world应用程序。这将要求您在Maven创建的项目目录中配置pom.xml文件。
然后一遍又一遍地运行mvn compile
,纠正错误直到它编译完毕。
然后运行mvn package
,直到您通过所有单元测试。
最后,运行mvn scala:run
一旦构建了一个真正的项目scala:run就可以选择吐出从shell脚本或批处理文件运行它所需的完整Java命令。