好程序员大数据学习路线分享Scala系列之基础篇了解Scala
1.1 什么是 Scala
Scala 是 Scalable Language 的简写,是一门多范式的编程语言。
Scala设计的初衷是要集成面向对象编程和函数式编程的各类特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
函数式编程两种理念:就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,所以,任意一个函数,只要输入是肯定的,输出就是肯定的,这种纯函数咱们称之为没有反作用。而容许使用变量的程序设计语言,因为函数内部的变量状态不肯定,一样的输入,可能获得不一样的输出,所以,这种函数是有反作用的。
函数式编程的一个特色就是,函数也是值,同容许把函数自己做为参数传入另外一个函数,还容许返回一个函数!java
1.2 Scala特色
Scala 是面向对象的
Scala是一个纯面向对象的语言,全部的值都是对象,类和对象行为用类和特质来描述.
Scala 是函数式的
Scala中函数是高等公民,全部函数都是值.
Scala是静态类型的程序员
Scala 是可扩展的
1.3 为何要学Scala
1.优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
2.速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,因此和JRuby,Groovy比起来速度会快不少。
3.能融合到Hadoop生态圈:Hadoop如今是大数据事实标准,Spark并非要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java作出来的API太丑,或者想实现一个优雅的API太费劲。编程
2 环境准备
2.1 JDK安装
由于Scala是运行在JVM平台上的,因此安装Scala以前要安装JDK
2.2 Scala安装
下载Scala地址而后解压Scala到指定目录
tar -zxvf scala-2.10.6.tgz -C /usr/java
配置环境变量,将scala加入到PATH中
vi /etc/profile数组
export JAVA_HOME=/usr/java/jdk1.7.0_45网络
export PATH=$PATH:$JAVA_HOME/bin:/usr/java/scala-2.10.6/bin
2.3. Scala开发工具安装
目前Scala的开发工具主要有两种:Eclipse和IDEA,这两个开发工具都有相应的Scala插件,若是使用Eclipse,直接到Scala官网下载便可。框架
因为IDEA的Scala插件更优秀,大多数Scala程序员都选择IDEA,能够到下载社区免费版,点击下一步安装便可,安装时若是有网络能够选择在线安装Scala插件。这里咱们使用离线安装Scala插件:编程语言
1.安装IDEA,点击下一步便可。因为咱们离线安装插件,因此点击Skip All and Set Defaul
2.下载IEDA的scala插件,
3.安装Scala插件:File -> settings -> Plugins -> Install plugin from disk -> 选择Scala插件 -> OK -> 重启IDEA函数式编程
3.1. 值和变量
使用var 声明一个变量。
•scala语言是强类型语言。
•var修饰的变量,内容和引用均可变
使用val声明一个常量或值
•val修饰的变量是不可变的,注意不可变的不是内容,而是引用;
•val修饰的变量,至关于Java中final修饰的变量;
•只有val修饰的变量才能被lazy修饰;使用lazy定义变量后,只有在调用该变量时才会实例化这个变量的值。并且惰性变量只能是不可变变量;
//变量定义方式
var a:int = 1
var aa = 1
val aaa:Int = 3
val aaaa = 4
lazy val aaaaa = 4
官方推荐使用val。
2.val和var区别示意:
可使用数组,更容易懂
class A(n: Int) {
var value = n
}函数
class B(n: Int) {
val value = new A(n)
}工具
object Test {
def main(args: Array[String]) {
val x = new B(5)
x = new B(6) // 错误?
x.value = new A(6) // 错误?
x.value.value = 6 // 正常
}
}
3.lazy
相似方法,先声明,后调用
4.val or var
在val和var都可的条件下,官方推荐使用val
3.2. 经常使用类型
Scala和Java同样,有7种数值类型Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型,
和Java不一样的是 ,Scala没有基本类型与包装类型之分,这些类型都是类,有本身的属性和方法。
至关于Java的包装类;
1.toString()
1.to (10)
scala类型层级关系:
scala中全部的值都有类型,包括数值和函数.
scala 类型转换:
val x: Long = 987654321 val y: Float = x // 9.8765434E8 (note that some precision is lost in this case) val face: Char = '☺' val number: Int = face // 9786
3.3. 操做符
Scala中没有操做符,只是以操做符的格式去进行方法调用。
//数学运算符
+、-、* 、/、%
//关系操做符
< >= <= ! //逻辑操做符 && || //位操做符 | & ^ ~ //比较对象是否相等 == != 注意: 1.a + b 等价于 a.+(b) 1.Scala没有++,-- 能够用+=,-=代替 2.操做符都是方法的重载,是方法的调用