大数据学习路线分享Scala系列之基础篇
大数据学习路线分享Scala系列之基础篇先来了解Scala
1.1 什么是 Scala
Scala 是 Scalable Language 的简写,是一门多范式的编程语言。
Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于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地址https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz然后解压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官网下载即可http://scala-ide.org/download/sdk.html。
由于IDEA的Scala插件更优秀,大多数Scala程序员都选择IDEA,可以到https://www.jetbrains.com/idea/download/ 下载社区免费版,点击下一步安装即可,安装时如果有网络可以选择在线安装Scala插件。这里我们使用离线安装Scala插件:
1.安装IDEA,点击下一步即可。由于我们离线安装插件,所以点击Skip All and Set Defaul
2.下载IEDA的scala插件,地址http://plugins.jetbrains.com/plugin/1347-scala
3.安装Scala插件:File -> settings -> Plugins -> Install plugin from disk -> 选择Scala插件 -> OK -> 重启IDEA
- Scala基础
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.操作符都是方法的重载,是方法的调用

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java之戳中痛点 - (8)synchronized深度解析
Java之戳中痛点 - (8)synchronized深度解析概览:简介:作用、地位、不控制并发的影响用法:对象锁和类锁多线程访问同步方法的7种情况性质:可重入、不可中断原理:加解锁原理、可重入原理、可见性原理缺陷:效率低、不够灵活、无法预判是否成功获取到锁如何选择Lock或Synchronized如何提高性能、JVM如何决定哪个线程获取锁总结后续会有代码演示,测试环境 JDK8、IDEA一、简介1、作用能够保证在==同一时刻==最多只有一个线程执行该代码,以保证并发安全的效果。 2、地位Synchronized是Java关键字,Java原生支持最基本的互斥同步手段并发编程的元老级别3、不控制并发的影响测试:两个线程同时a++,猜一下结果 package cn.jsonshare.java.base.synchronizedtest; /** 不使用synchronized,两个线程同时a++* @author JSON @date 2019-08-29*/ public class SynchronizedTest1 implements Runnable{ static Synch...
- 下一篇
Java 并发编程-不懂原理多吃亏(送书福利)
作者 | 加多关注阿里巴巴云原生公众号,后台回复关键字“并发”,即可参与送书抽奖! 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/高流量系统的实现,都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。本文中,作者加多以通俗易懂的方式讲解了多线程并发编程从入门到实践需要掌握的理论知识与实际操作方法。 学习并发编程 Java 并发编程作为 Java 技术栈中的一根顶梁柱,其学习成本还是比较大的,很多人学习起来感到没有头绪、无从下手。那么学习并发编程是否有一些技巧在里面呢?为了让开发者从 Java 并发编程的苦海中解脱出来,大神 Doug Lea 特意为 Java 开发人员做了一件事情,那就是在 JDK 中提供了 Java 并发包(JUC)。该包提供了
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案