用Java语言开发许久了,一直接触指令式的语言开发,同时也做的多了,也逐渐感觉到了静态语言的一些弊病。Scala的出现,可以使Java程序员平滑的过度,Scala语言也是运行在JVM上的,可以与Java无缝交互;Scala是面向对象的,可以通过提升接口的抽象级别来帮助管理复杂性。Scala是简洁的,Scala程序员曾报告说,与Java比起来,它的代码行数可以减少到Java的1/10,哈哈,是不是有些夸张呢?个人觉得,如果能减少三分之一,就非常成功了;Scala是静态的,它以Java的内嵌类型系统为基础,允许使用泛型参数化类型,用交集组合型类型和抽象类型隐藏实现细节,从而能够设计出安全而又能灵活使用的接口。
我们先来安装Scala的开发包,我的版本是scala-2.9.0.1.zip,安装方式解压就可以,环境变量和Jdk的没什么区别,指向到bin目录下就可以了,打开dos窗口,运行scala,出现下面结结果就表示安装成功了
好了,让我们开始Scala之旅吧。
在Scala中,分号是可选的,你可以写或者不写;定义类和构造函数,Java中一般这么写
public class MyTest {
private int id;
private int index;
public MyTest(int id, int index) {
this.id = id;
this.index = index;
}
}
而在Scala中,可以这么写
class MyTest(id: Int, index: Int)
除了这些特性,尤其值得一提的是Scala是静态类型的语言,它支持指令式的编程,但更推荐的使用函数式的编程。比如下面的代码
object HelloWorld {
def main(args: Array[String]): Unit = {
var i = 0
while(i < args.length) {
println(args(i))
i += 1
}
}
}
我可以使用scalac HelloWorld.scala使他生成class字节码,也可以直接在JVM上执行,
scala HelloWorld.scala Hello World
打印结果将是 Hello World
大家不觉得这样有一丁点儿复杂吗,来看看Scala的函数式的编程是什么样的
object HelloWorld {
def main(args: Array[String]): Unit = {
args.foreach(arg => print(arg + " "))
}
}
arg就是你临时定义的变量,Scala默认为其开辟了临时的String变量arg。
体验了最初的简单函数式风格,我们再看下Scala中如何使用数组,在Java中,使用一个最简单数组是这样的
public class ArrayTest {
public static void main(String[] args) {
String[] strs = new String[]{"Hello", "World", "!"};
for(String str : strs) {
System.out.println(str);
}
}
}
在Scala中,同样是通过new来实例化对象,实例化过程中,可以用值和类型使对象参数化,使用值参数化实例可以通过把值传递给构造器的圆括号来实现,比如,Scala中数组是这么实现的,值得一提的是,在Scala中,数组是可变数据结构,这是和Java中有区别的地方
object ArrayTest {
def main(args: Array[String]): Unit = {
var greetString = new Array[String](3)
greetString(0) = "Hello"
greetString(1) = "World"
greetString(2) = "!"
for(i <- 0 to 2) {
println(greetString(i))
}
}
}
i <- 这个表达式是表示左边的涵盖在右边范围之内。
下面我们来看看List,在Java中,List是可变的结构序列,而在Scala中,List是不可变的,在Scala中,List是不可变的数据结构,这么设计是为了函数式编程而设计的,奇特的是,Scala中并不需要通过new来创建List对象,比如下面一个例子,我创建了两个集合,并且把它们循环打印出来。
def main(args: Array[String]): Unit = {
var list1 = List("aaa", "bbb", "ccc")
var list2 = List("ddd")
var list3 = list1 ::: list2
list3.foreach(list => print(list + " "))
}
打出的结果就是 aaa bbb ccc ddd
我们再来看看Set和Map,Scala致力于充分利用函数式和指令式两方面的好处,所以它的集合库区分为可变型和不可变型,都承接与Set,他们分别在Scala的不同包里。在Java中,我们称为“实现”了接口,而在Scala中,我们称为“扩展”或“混入”,下面我分别用Scala中的HashSet和HashMap的不可变数据类型,来做例子
object SetTest {
def main(args: Array[String]): Unit = {
var set = HashSet("b", 3, "c")
set += "very"
set.foreach(value => print(value + " "))
}
}
这是Set的,下面是关于Map的
object MapTest {
def main(args: Array[String]): Unit = {
var map = HashMap(1 -> "a", 2 -> "b", 3 -> "c")
map += (4 -> "d")
map.foreach(value => print(value + " "))
}
}
Scala的程序,只要后缀名命名为.scala就可以了。同时Eclipse也内置了对Scala的支持,安装插件的网址是http://download.scala-ide.org/nightly-update-wip-experiment-2.9.0.final
大家可以自行安装,安装完后就可以在Eclipse中运行了,如下图
现在对函数式编程有个了最初体会了,呵呵,以后还会继续探讨关于Scala函数式编程带来的一些好处,大家相互学习,还请多多指教。
- 大小: 8.4 KB
- 大小: 17.6 KB
分享到:
相关推荐
Scala语言入门
scala 入门PDF文档,编码规范文档。 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
Scala语言分析报告
资源名称:Scala编程语言从入门到精通资源目录:【】DesignOfScala【】ExcitedScala_7(1)【】lift-lift_23_sbt-cf313e1【】ScalaTutorial-zh_CN【】Scala_2.7.6_API【】Scala向导(前13章)【】Scala向导(前15章)-p...
适合想要快速入门scala语言进行基于Spark/Flink的大数据开发的读者。
scala 从入门到精通以及各种使用规范,使用技巧的文档
Scala语言规范-Scala 是一门类 Java 的编程语言,它结合了面向对象编程和函数式编程。 Scala 是纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混入(mixin)的方式组合在一起。 Scala...
第 1 章 SCALA 的概述 11.1 学习 SDALA 的原因11.2 SCALA 语言诞生小故事 1以及 JVM 的关系分析图21.4 SCALA 语言的
02.Scala程序和Java程序对比 03.Scala环境搭建 04.Scala解释器 05.案例_做最好的自己 第二章 变量和数据类型 00.导学 01.输出语句和分号 02.Scala中的常量 03.Scala中的变量 04.字符串的定义 05.惰性赋值 06.标识符 ...
Scala语法入门.pdf
本文档是scala的入门学习教材,主要是scala的编程基础和语法
Scala语言规范.zip
Scala编程语言详解(从入门到精通)。Scala语言详解doc文档。Scala是面向对象的;Scala是静态类型的;Scala是可扩展的。为学习Spark奠定基础
《Scala语言规范》非常有利于spark的学习。希望能够帮助到大家。
Scala是一门类Java的编程语言,它结合了面向对象编程和函数式编程。Scala是纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混入(mixin)的方式组合在一起。
Scala简介&快速入门 基础语法 变量 数据类型 流程控制 操作符重载 模式匹配 函数式编程基础 函数式编程说明 函数定义/声明 函数运行机制 递归 函数注意事项和细节 过程 惰性函数和异常 面向对象编程初级...
Scala 语言衍生自 Funnel 语言。Funnel 语言尝试将函数式编程和 Petri 网结合起来,而 Scala 的预期目标是将面向对象、函数式编程和强大的类型系统结合起来,同时让人要能写出优雅、简洁的代码。本文希望通过一系列 ...
尚硅谷大数据scala语言核心编程,是大数据开发必备的技能。