Scala基础入门教程(一)

Scala介绍:

Scala是一门多范式的编程语言,一种类似java的编程语言 [1]  ,设计初衷是实现可伸缩的语言 [2]  、并集成面向对象编程函数式编程的各种特性。

scala是基于Jvm的,完美兼容Java,是脚本类语言,但为什么说是脚本类语言呢,因为它运行过程如下:

源码 - scalac(编译) - *.class字节码 - scala - Jvm上 -running

先编写源码,源码属于Scala的脚本,Scala脚本语法和Java完全不一样,例如:Java定义变量是需要数据类型的,而Scala可以不定义,也可以定义,但有些地方也必须让你定义数据类型

Scala运行也和Java不一样,它写完的东西生成的都是.class但是使用Javac不能编译Scala源码的,必须使用它自己的Scalac编译,编译后生成的class代码使用Scala和Java都可以,使用Java的话,ClassPath中必须包含Scala运行时的类库。

 

做大数据为什么要学习Scala?

因为Spark是由Scala写的,虽然也支持Java、Python、R语言。

从学习的成本来说,Scala代价是最高的,最难学的,最容易的是R,但是笔者也没看过。

Scala好处:

从生产能力来说,这些语言的代码量都很小,写很短的代码完成复杂的功能,因为他们都是函数式编程语言,

从资源和第三方类库比较式Python、R、Scala,Scala太难学,一般没什么人用Scala开发第三方类库的,

但是Scala有一个好爸爸,就是Java,因为Java中的类库远远要比其他要多,因为它的社区式最庞大的,也没有这样的必要用Scala再去把Java写过的类库再写一遍,因为Scala本身就可以不经过任何步骤并使用Java类库。

从文档和社区来说,单说Scala比其他都比较差,但是从平台执行速度Scala是最快的,因为Scala就是在Jvm之上的,Jvm执行速度和C++的速度是不相上下的。

Spark最好的集成的语言就是Scala,因为使用的Scala开发的Spark。

在Spark的编程中,最好的考虑就是Scala,如果Spark出现一个新功能第一个支持的就是Scala,其次再是Python和R,因为还要让Python再去开发才行,如果想使用新特性,就要首先选择Scala。

 

这里笔者就不写具体的Scala的安装环境和步骤了,网上很多,笔者这里直接就开始操作了。

我们先创建一个HelloWork。

Scala会看到三类事务,Class、Object、Trait,在Scala中把静态的和非静态的严格分开,

Class中能编写非静态的东西,

在Object中只能编写静态的,你便写不出非静态的代码。我们现在要知道Java中main方法是静态方法,这个地方我们选择Object

 

我们写一个main方法:直接敲一个main,按回车即可出现

object HelloWord {
  def main(args: Array[String]): Unit = {
    println("HelloWorld") 
  }
}

然后点击运行,我们的HelloWord就成功了。

 

现在我们来看一下结构,我们的外层不是一个类,是一个Object,

里面是一个Static静态的main方法,但是它的写法是def main, 数据类型是在变量后面冒号,

返回值在参数完成后面,它的方法体必须是以 =号来赋值

它的一条语句不一定要有分号,有也可以,由结果可见运行和Java没什么区别,运行是以Java运行的。

 

笔者这里创建项目是Maven项目,并不是SBT项目,现在运行的过程没什么区别,

但是程序打包的话,Maven和SBT是由差别的,SBT可以直接打包,但是Maven需要有一个Scala的插件。

 

在这里我们使用的Object,下面的一切都是Static的(静态的),包括你在里面定义的一切变量。

 

我们知道Java是面向对象的,但是Scala是完全面向对象的,这里要提一点的就是,Java保留了基本数据类型,在Scala不存在基本数据类型,一切都是引用数据类型,任何的值都是一个对象。

例如 5这个数字在Java中是个Int类型的,在Scala中5也可以点出方法,因为5就是个对象(声明的任何一个值都是对象)

在Scala中关于面向对象的,一个是类(Class),一个是特征(Trait),Trait相当于Java中的Interface(里面可以由抽象的方法)

Scala还支持了多继承,Scala是函数语言,每一个函数在Scala中都是一个值,当我们定义一个函数的时候就是定义了一个变量。

为什么说Scala中所有的函数都是一个值呢,如下:

object HelloWord {
  def main(args: Array[String]): Unit = {
    //println("HelloWorld")
  foo
  }

  def foo = println("foo")
}

结果:
foo
Process finished with exit code 0

所有函数都是一个Value(值),所有值又都是一个对象

object HelloWord {
  def main(args: Array[String]): Unit = {
    println(foo.getClass)
  
  }

  def foo = println("foo")
}

由上图可见,在这是一个函数,真正编译成一个JavaClass,是一个类。

Scala有函数能力的,每一个函数就是一个值,每一个值就是一个对象。

在Scala中函数:  高阶函数,克里化函数,内嵌函数(函数中定义函数)等

简单概念:

高阶函数:函数的参数可以传递函数

克里化函数:函数可以拆分,部分执行。

下一章具体讲解Scala中的数据类型及操作

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值