Scala 是一个什么样的语言!谢谢解答!由衷谢谢、
这个问题比较宽泛,简单的说一下。
首先scala是运行在jvm上的,也就是说scala会被编译为和java编译后的class一样的字节码。这也代表scala和java是可以互相调用并且它们可以联合编译,不过实际上来说scala调用java很容易,而java调用scala会遇到一些问题。
其次scala是一个静态类型的语言,它通过类型推断来隐藏大部分的类型声明信息,让它的语法达到动态类型语言的简洁程度。但因为scala的静态类型特点,它的性能接近原生的java,高出groovy相当多。
再次scala同时提供两种编程范式的支持,OOP和FP,至于什么是FP,这里不展开讲,可以自行google。
scala在java的基础上引进了很多现代高级语言的特性,比如闭包、对DSL的友好支持、trait的混合以及扩展已有类型能力的方法(通过隐式转换)。但也因为scala引入的这些特性,使scala的语法显得独特并且有很多特例,对于刚开始接触scala的人来说,看scala代码经常会看的云里雾里的。
另外scala支持的FP范式和actor模型让scala的高并发编程相对java来说更清晰易读,容易实现。
简单比较scala | groovy | java的话:
语法: 独特 | 类似java | java
类型系统: 静态 | 动态 | 静态
性能: 好 | 差 | 好
表达力: 好 | 好 | 差
灵活度: 较好 | 好 | 差
易读: 差 | 好 | 好
个人认为scala是一个很有魅力的语言,如果是只接触过C一族语言(C/C++/Java)的人应该会从scala看到很多新鲜的东西,好的语言让人有去把玩它用它创造东西的欲望。
简述 Scala与Java的区别 :以及优劣势,不要复制百科里面的..
都是编程语言啊.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序.它也能运行于Java ME, CLDC(Java Platform, Micro Edition Connected Limited Device Configuration)上.目前还有另一.NET平台的实现,不过该版本更新有些滞后. Scala的编译模型(独立编译,动态类加载)与Java和C#一样,所以Scala代码可以调用Java类库(对于.NET实现则可调用.NET类库) . Scala包中包含了编译器和类库,以BSD许可证发布.面向对象,函数式编程
编程语言Scala一般用于做什么样的项目
展开全部
Scala有交互式命令行(REPL), 可以在上面快速的试各种语法和代码。这对学习新特性,或者实验新想法非常有用。(第1章)
一致性: 尽管Scala融合了静态类型系统、面向对象、函数式编程等语言特性,但却很少能看出融合的痕迹。Scala是我见到融合最多语言特性而又不显得杂乱的编程语言之一。
类型安全:Scala创始人是教授,他先带领创建了Java 5编译器,而后觉得Java有太多羁绊而发明了Scala。 Scala编译器和类型系统非常强大,它的目标是尽量把软件错误消灭在编写过程中。 Scala类型系统是图灵完备的,甚至可以在编译期间解决问题。
面向对象: Scala是面向对象的编程语言,所有的变量和方法都封装在对象中,可以把信息封装起来供外部使用。(第2章)
函数式编程:Scala同时又是函数式编程语言,函数可以独立存在,可以定义一个函数作为另一个函数的返回值,也可以接受函数作为函数的参数。这给组合函数带来了很大的便利。如何把面向对象编程形容成搭积木的话,函数式编程就像拼线条,更灵活和更有创意。(第3章)
异步编程: 由于函数式编程提倡变量不可变,使异步编程变得非常容易。同时Scala提供的Future(第5章), 和akka类库(第9-11章),使得异步编程变得非常容易。
基于JVM: Scala会被编译成为jvm bytecode,所以Scala能无缝集成已有的Java类库。你可以非常自然的使用已经存在的非常庞大且稳定的Java类库,比如小巧好用的apache.common.*, 或者Java上的各种工具类库。
因为如此众多特性,用Scala可以优雅地编写简洁的代码,同时又能减少很多低级错误;能快速进行开发,又能保证系统性能、团队协作和长期维护。
scala的实际应用场景有哪些
scala应用场景:1.大数据,和为spark的shell编程提供了方便!当然,spark也提供了Python,Java,R的 Api!2.也拥有数据计算的功能3.提供面向Web服务,可以和Java等相同的spring Web应用 等等就不仔细叙述了
如何在eclipse中安装scala
(1)安装scala
在官网上下载scala,本人下载scala-10.04 http://www.scala-lang.org/download/all.html
其中windows下有两个版本。msi和exe,具体区别可百度查看。这边随便找了一个说明http://zhidao.baidu.com/link?url=7BRlyeFUYodktHwGCjLUmOBFtqrMX1x0D3y3VA_BvSVhRkWXFR3dMSmbw3JIkxUF7IljpW_YjGzeQ4sKejKt39zb-tnYDzx5cxLI09Ud8EK
建议下载msi,比较方便。
下载之后直接安装即可。
记住安装目录,比如本人安装在 D:\proSoftware\scala
修改环境变量
不同版本的windows界面不尽相同,进入环境变量之后,修改系统变量中的path变量,在最后加入
D:\proSoftware\scala\bin 注意,如果加入之前最后没有分号,记得手动加上分号,同时记得在scala目录之后加上\bin
修改完环境变量之后,运行cmd 输入 scala -version 出现版本信息表示安装成功。
(2)安装eclipse的scala插件
在官网上下载IFE http://scala-ide.org/download/sdk.html
下载完直接解压就可以运行,打开解压好的eclipse
点击file->new ->scala project
填写project name
右击文件夹,new–>scala object
填写名称 hello
然后增加代码
def main(args :Array[String]){
println(“Hello world!”);
}
选中Hello.scala,右击run as ->scala application
控制台输出结果
成功。
scala命令是怎么编译运行scala程序的
我感觉原来它也只是通过运行一个java命令来运行一个java程序, 其中会把对应的scala依赖的core jar加入classpath, 这个java程序最终会调用scala的java程序 MainGenericRunner, 这个MainGenericRunner会把scala程序路径作为一个参数,进而调用scala程序 难怪我不需要配置scala到系统路径,eclipse的scala插件只需要把这些依赖jar加入classpath也能通过java来编译scala程序.
如何用idea创建scala程序
1.安装JDK,并设置环境变量
(1)JAVA_HOME = C:\Program Files\Java\jdk1.8.0_11
(2)Path = D:\Program Files\scala\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
(3)CLASSPATH = %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
2.安装Scala(点击打开链接),并设置环境变量
(1)SCALA_HOME = D:\Program Files\scala
(2)Path = D:\Program Files\scala\bin;
3.安装IDEA(点击打开链接)
(1)安装Scala插件(Configure -> Plugins -> Install JetBrains Plugins : 搜索Scala)
4.使用IDEA创建Scala程序
(1)创建Scala程序
Scala 二叉树
///用foldLeft就可以了,我重新定义了泛型,应该比较完美了
trait Tree[+T]
/**
* 空树
*/
case object Empty extends Tree[Nothing]
/**
* 节点, 单个节点是一棵树
*/
case class Node[T](val value: T, val left: Tree[T], val right: Tree[T]) extends Tree[T]
////////////////////////
def insert[T](x: T, tree: Tree[T])(implicit order: Ordering[T]): Tree[T] = {
tree match {
case Empty => Node(x, Empty, Empty)
case Node(v, left, right) if order.gt(x, v) => Node(v, left, insert(x, right))
case Node(v, left, right) if order.lt(x, v) => Node(v, insert(x, left), right)
case Node(v, left, right) if order.equiv(x, v) => Node(v, left, right) //其实没有必要重新创建
}
}
def mkBinarySearchTree[T](list: List[T])(implicit order: Ordering[T]) = {
list.foldLeft[Tree[T]](Empty)((tree, value) => insert(value, tree))
}
def main(args: Array[String]) {
mkBinarySearchTree(List(1, 2, 3))
}
Scala真的是最火的编程语言吗
最火的最吃香的Java.现在移动端都用java.c的移动端很少.电脑的话一般都是c#
scala中的部分应用函数和偏函数的区别
部分应用函数和偏函数是无关的。经常把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混。
总结如下:
部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念
偏函数是只对函数定义域的一个子集进行定义的函数。 scala中用scala.PartialFunction[-T, +S]类来表示
比如定义了一个函数:def sum(x: Int)(y: Int) = x + y, 当调用sum的时候,如果不提供所有的参数或某些参数还未知时,比如sum _ , sum(3)(_: Int), sum(_: Int)(3), 这样就生成了所谓的部分应用函数。部分应用函数只是逻辑上的一个表达,scala编译器会用Function1, Function2这些类来表示它.
下面这个变量signal引用了一个偏函数
val signal: PartialFunction[Int, Int] = {
case x if x > 1 => 1
case x if x < -1 => -1
}
这个signal所引用的函数除了0值外,对所有整数都定义了相应的操作。 signal(0) 会抛出异常,因此使用前最好先signal.isDefinedAt(0)判断一下。 偏函数主要用于这样一种场景:对某些值现在还无法给出具体的操作(即需求还不明朗),也有可能存在几种处理方式(视乎具体的需求);我们可以先对需求明确的部分进行定义,比如上述除了0外的所有整数域,然后根据具体情况补充对其他域的定义,比如 :
val composed_signal: PartialFunction[Int,Int] = signal.orElse{
case 0 => 0
}
composed_signal(0) // 返回 0
或者对定义域进行一定的偏移(假如需求做了变更, 1 为无效的点)
val new_signal: Function1[Int, Int] = signal.compose{
case x => x – 1
}
new_signal(1) // throw exception
new_signal(0) // 返回 -1
new_signal(2) // 返回 1
还可以用andThen将两个相关的偏函数串接起来
val another_signal: PartialFunction[Int, Int] = {
case 0 => 0
case x if x > 0 => x – 1
case x if x < 0 => x + 1
}
val then_signal = another_signal andThen signal
这里的then_signal 剔除了-1, 0, 1三个点的定义