01.Scala快速入门


目录 1

写在最开始的话 2

1、Scala快速入门 2

1.1 环境搭建 2

1.2 快速入门 3

1.2.1 定义变量 3

1.2.2 定义函数 3

1.2.3 编写scala脚本 3

1.2.4 while循环 3

1.2.5 scala中的foreach 3

扫描二维码关注公众号,回复: 2956088 查看本文章

写在最后的话 4

写在最开始的话

其实在很久之前,我有自己学习过一些基于JVM的语言,包括Scala,Groovy,Bshell(不是linux中的shell,是最早的Sun公司出的bshell),但是在工作和日常生活中用不到之后,学习了又会忘记,不知道是不是记忆力不好的原因,但是此次公司决定使用Spark,准确的说是明年第二季度开始使用,所以我又开始整理关于Scala的知识,希望借着这个机会能够将Scala的语言特点整理,并且熟练掌握,应用于工作和日常开发之中。

关于Scala这门语言,其实语法量比Java多很多,很多老外建议我使用Clojure,不要使用Scala,他们给出最大的一个槽点就是语法太多,用他们的话讲就是完成一件事,scala有太多的方式可供选择,这样反倒不太好,但是不管怎样,既然要去使用这么语言来糊口养家,那么就自动屏蔽一些否定的声音,也许他们说的有道理。

另外一个很重要的话题是,如果你掌握了Java 8,其中一些函数式编程对知识,对学习Scala的帮助非常大,本人利用业余的时间录制了一套关于Java 8的视频教程,大概有40集,全部是针对Java 8新语法和新编程思想的实战,感兴趣的可以去下载观看

https://pan.baidu.com/s/1mhUYPK0

1、Scala快速入门

1.1 环境搭建

目前,最新版本的Scala是2.2.0,但是我本人使用的是2.10.3,JDK我使用的是1.8版本,编辑工具我使用的是Intellij Idea 15版本,读者可以在该编辑器中安装scala语言的插件,但是在安装插件的时候需要注意一下,如果你通过Idea在线安装的方式比较慢,你可以采用从本地磁盘进行安装,下载插件的地址为:

https://plugins.jetbrains.com/plugin/?id=1347

注意不要选择错误的版本哈,否则就会出现兼容性错误提示

1.2 快速入门

关于如何搭建环境,相信每一个计算机从业者,都没有任何问题,即使出了问题,问问度娘也是很容易解决的,所以我们就不在这里赘述了,直接来看看一些简单的例子,让大家快速上手Scala这门语言

1.2.1 定义变量

Scala中有两种变量,第一种是var,第二种是val,其中val类似于Java中的final,一旦定义就不允许改变,在Scala中的数据类型要比Java的稍微丰富一些,但是在这里我们暂时不做过多的解释,下面看一个简单的例子,其中第一种定义和第二种定义是完全等价的,只不过前者利用了Scala的类型推导特性

//两者完全等价

val i = 10

val i1:Int=10

val message="Hello World"

val message1:String="Hello World"

val message2:java.lang.String="Hello World"

如果你对一个val声明的变量尝试修改,会出现错误。

1.2.2 定义函数

函数在任何语言中的地位都是举足轻重的,尤其是在函数式编程语言中,是绝对的一等公民,应此掌握如何定义函数,使用函数,是非常重要的,我们来看看scala是如何定义函数的

def max(x: Int, y: Int): Int = {

  if (x > y) return x

  else return y

}

def simpleMax(x:Int,y:Int)=if(x>y) x else y

同样我们采用了完整的写法和比较简洁的写法,让大家进行对比,看了这个函数的定义,我们来说说函数的结构

其中第二个省略了return语句和函数返回类型,甚至是花括号,那是因为scala是可以推导出来他的返回类型。

我们再来看一个比较好玩的,这样的特性在Java中是不具备的,函数定义如下所示

def returnAny(x: Int) = {

  if (x > 0)

    x * 10

  else

    "I am a text"

}

该函数在x大于0时返回一个Int类型的数字,其他情况则返回一个字符串,那么他的返回值到底是什么呢?答案是Any,这是Scala语言中的一个类型,我们在以后的文章中会继续详细解释

1.2.3 编写scala脚本

Scala语言不仅可以使用scalac进行编译后执行,还可以像shell一样当作脚本语言来执行,我们来看一个简单的例子

def max(x:Int,y:Int):Int={

if(x>y) x

else y

}

println("I will use my defined function for calculate.")

val x = 10

val y = 20

val result = max(x,y)

println("the max value is "+result+". between "+x+" and "+y)

保存为script.scala,然后使用命令scala script.scala去运行。

1.2.4 while循环

既然是快速入门,我们来简单了解一下Scala中的循环,看下面的脚本printargs.scala

var i = 0

while(i<args.length){

println(args(i))

i+=1

}

执行命令之后会出现如下的结果

scala printargs.scala hello alex wangwenjun scala

hello

alex

wangwenjun

scala

当然scala还有更好的做法处理这种情况,但是我们为了演示,暂时简单的说一下,其实在Java 8 中,对待这种循环一个数组然后进行consume也是非常容易的,如果您了解Java 8的函数式编程的话

1.2.5 scala中的foreach

Scala中使用比较多的就是foreach了,在本节中我们来使用foreach完成上面的例子,并且对比一下Java 8是如何处理的

args.foreach((arg:String)=>println(arg))

println("=============================")

args.foreach(arg=>println(arg))

println("=============================")

args.foreach(println)

这三句话的意思一某一样,只不过越来越简化了,在Java 8的函数式接口中,同样可以写的很简洁,我们来看一下用Java 8的语法是如何完成的

Arrays.stream(args).forEach(System.out::println);

Java 8 的一句话照样也可以搞定一切,这也是Java 8 刚出来的时候很多人问Oracle的开发者,你们是不是想蚕食基于JVM的动态语言,尤其是Scala的原因了。

写在最后的话

本节课的内容大概就这么多,我们会逐步的更新,为了能够让读者尽快看到最新的内容,没更新一次就会发布一次,不用等到搞定一切之后再做统一发布,有问题可以和我交流,我们一起共同学习,共同进步,期待着你们的建议。

本篇文章的同步视频:http://pan.baidu.com/s/1qY5zjha

猜你喜欢

转载自blog.csdn.net/wangwenjun69/article/details/53242745