如何开始scala
我是.NET开发人员,我想扩大我的视野,并检查现代趋势后,决定尝试Scala。你能不能建议一个很好的策略呢?我应该先学习Java吗?我应该读什么来源或手册?有没有任何操作系统项目来练习Scala并在其上成长?
谢谢, 解决方法
您可以通过访问
Simply Scala获得第一印象,您可以使用在线翻译。
一个绝对的经典是Scala for Java Refugees,它最初是为来自Java的人编写的,但对于您来说将是非常有帮助的,考虑到C#/ Java的基础知识是如何相似的。 您不需要首先学习Java,但您需要安装并运行Java运行时/开发工具。 然后去http://www.scala-lang.org/downloads并下载适合您的操作系统的软件包(我总是喜欢Scala的夜间版本,他们比最新的稳定版本有更多的bug修复)。 之后,运行Scala REPL,它基本上是“Simply Scala offline”(Simply Scala也使用了Scala REPL)。即使是许多Java程序员也使用Scala REPL来初始化事物。 如果你喜欢书籍学习,我可以推荐Programming in Scala (2nd edition) by Martin Odersky(如果你从语言设计的角度出发,想要“参考书”)。还有其他类似“编程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,"German") val don = Person("Don",11,"Italian","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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- AngularJS等效于Angular ng-container
- bash – 使用find删除所有子目录(及其文件)
- bash – 在同一个子shell中分配和使用变量
- angularjs – 量角器 – 获取“Runtime.executionContextCr
- 小白to大神 vim学习笔记
- 【数据结构】树状数组模板--CODE[VS] 1080线段树练习and108
- typescript – Angular2子属性更改不限制绑定属性的更新
- bash – 当路径作为命令输入时,cd到目录(而不是“foo是目录
- WebService之Axis2系列教程(一)Axis2的下载、安装和使用
- angularjs – Angular UI – Bootstrap Accordion not work