Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从scala开始_Scala_Jvm - Fatal编程技术网

如何从scala开始

如何从scala开始,scala,jvm,Scala,Jvm,我是.NET开发人员,我想拓宽我的视野,在了解了现代趋势之后,我决定尝试Scala。你能建议一个好的开始策略吗?我应该先学Java吗?我应该阅读哪些资料或手册?是否有任何操作系统项目可以实践Scala并在其上成长 谢谢, Dominique如果您想学习Scala,那么学习Scala并在学习过程中学习所需的Java将为您提供更好的服务。您不需要学习Java就可以开始使用Scala 阅读这个问题是一个很好的开始,它列出了目前可用的大多数Scala书籍 您不需要先学习Java。你熟悉函数式编程吗?如果

我是.NET开发人员,我想拓宽我的视野,在了解了现代趋势之后,我决定尝试Scala。你能建议一个好的开始策略吗?我应该先学Java吗?我应该阅读哪些资料或手册?是否有任何操作系统项目可以实践Scala并在其上成长

谢谢,
Dominique

如果您想学习Scala,那么学习Scala并在学习过程中学习所需的Java将为您提供更好的服务。您不需要学习Java就可以开始使用Scala

阅读这个问题是一个很好的开始,它列出了目前可用的大多数Scala书籍


您不需要先学习Java。你熟悉函数式编程吗?如果是的话,你应该可以跳得很快。无论如何,以下是一些关于如何学习Scala的想法:

  • 找一本好的参考书。我推荐Odersky、Spoon和Venners使用Scala编程。我发现它是最全面的Scala书籍之一

  • 与学习任何新语言一样,尝试使用Scala编写几个小应用程序。如果你不是一个函数式程序员,你可以用一种不同的模式来编程,但现在还可以。尝试编写程序时不要使用“var(改为使用val)”,不要使用循环,并尽量减少整体状态变化

  • 使用sbt构建您的程序。我有点犹豫是否推荐这个,因为你必须学习一个新的工具来编写你的程序。但是我发现用它来编写Scala应用程序也是一件很棒的事情。许多Scala项目似乎都使用sbt

  • 还可以查看此评论和该线程,以帮助您过渡到Scala


我认为您不需要了解Java就可以开始使用Scala。尽管如此,了解大致的笔划还是很有帮助的,因为我读过的大多数Scala文档都提到了Java特性或bug

关于开源项目,你可以看看。不过,大多数开源Scala项目倾向于框架


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

如果你去有在线翻译的地方,你可能会得到第一印象

这是一本绝对经典的书,最初是为来自Java的人编写的,但考虑到C#/Java的基础知识是多么相似,它对您非常有帮助


您不需要先学习Java,但需要安装Java运行时/开发工具包并使其正常工作

然后转到并下载适合您的操作系统的软件包(我总是喜欢Scala的夜间版本,它们比最新的稳定版本有更多的bug修复)

之后,运行基本上是“Simply Scala offline”(Simply Scala也在封面后面使用Scala REPL)的Scala REPL。甚至许多Java程序员都会首先使用Scala REPL进行原型化

如果你喜欢学习书籍,我可以推荐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, "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
//定义具有某些属性的类
案例类人物(姓名:String,变量年龄:Int,语言:String*)
//创造一些人
val joe=个人(“joe”,42,“英语”,“法语”,“丹麦语”)
val doe=个人(“doe”,23,“英语”,“德语”)
val don=个人(“don”,11,“意大利语”,“法语”,“波兰语”)
val bob=个人(“bob”,17,“德语”)
//访问一个属性
乔,你的名字
//唐过了12岁生日!
don.年龄=12岁
//把这些人列入名单
val persons=列表(乔、多伊、唐、鲍勃)
//将名单分为未成年人和成年人
val(未成年人、成年人)=人。分区(年龄<18岁)
//获取所有人的总年龄
val PersonTotalAge=persons.map(uu.age).sum
//返回一个只包含说英语的人的列表
val englishSpeakers=persons.filter(u.spokenLanguages.contains(“英语”))
//与上面的示例相同。
val EnglishPeakers 2=
对于{person(i \“price”).text.toDouble*(i \“amount”).text.toDouble)。总和
//这是一个象征
val sym='SomeSymbol
//我懒得为XML使用字符串!(隐式的例子)
隐式def symbol2string(symbol:symbol)=symbol.name
//现在我也可以使用符号了!
val total=(shoppingCart\'项目).map(i=>(i\'价格).text.toDouble*(i\'金额).text.toDouble.sum

从scala开始就不需要Java作为一种语言(而且Java本身与c#非常相似,或者实际上与c#相反……)。 但是,一旦您开始使用scala进行富有成效的工作,您将与许多java库进行交互,并了解到java world是比.net world更多或更少的标准库,在.net world中,您需要的很多东西都直接存在于标准的.net库中。您可以边走边学习,但不是从ja中学习va背景,这种经历可能会让人感觉难以承受。不过,如果你开始学习java,情况也会一样。。。。 您可能需要了解的其他特定于java的事情是,泛型在JVM中的功能要弱得多,以及scala如何解决这一问题

至于scala本身,作为一种语言,来自.NET,阅读一些函数式编程方面的知识可能比学习java受益更多。函数式范例是我最初使用scala时最不了解的部分,这给我从您可以找到的资源中理解示例代码带来了最大的麻烦在scala网站上

建立基础

  • 功能公关
    //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