Scala:基础知识01

Posted Xiao Miao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:基础知识01相关的知识,希望对你有一定的参考价值。

Scala基础知识

一、Scala的介绍与安装

1.Scala的介绍

Scala是一个多范式编程语言

  • 面向对象编程 OOP
  • 函数式编程 FP

Scala是一门基于JVM的编程语言,最终Scala也是编译成为字节码运行在JVM之上。
Scala可以和Java之间无缝调用。
Scala优点:

  • 语法简介、灵活
  • Scala静态编程语言特性
静态语言:源码-->编译(数据类型确定 避免bug)--->执行
动态语言:源码-->加载执行 Python

Scala基于Java,拥抱了Hadoop生态圈。Spark软件角度。

2.Scala的安装

windows上安装
百度网盘下载地址
提取码:i9ve
版本:scala-2.11.12.zip

1.下载完解压该文件到没有中文,没有空格的目录
2.配置环境变量

SCALA_HOME=D:\\Study\\Scala\\scala-2.11.12
path=%SCALA_HOME%\\bin

在这里插入图片描述在这里插入图片描述
3.验证是否安装成功

scala version

IDEA插件安装

在这里插入图片描述在这里插入图片描述
Linux上安装
百度网盘下载地址
提取码:93u1

#1.切换到指定目录
cd /export/server/
#2.上传
rz
#3.解压
tar -zxvf scala-2.11.12.tgz
#4.配置环境变量 
vim /etc/profile
#5.添加以下内容
export SCALA_HOME=/export/server/scala-2.11.12
export PATH=$PATH:$SCALA_HOME/bin
#6.刷新环境变量
source /etc/profile

二、声明变量

常量、变量
语法:

val/var 变量名称:变量类型=初始值

在这里插入图片描述

注意事项

  • 名称在前,类型在后中间使用:分割
  • 类型首字母要大小写 大小写敏感
  • 很多场合下,类型省略不写,scala编译器可以自动推导
  • scala支持惰性赋值,叫做延迟赋值,什么时候使用什么时候加载,只支持常量

在这里插入图片描述在这里插入图片描述

三、字符串

字符串类型

  • 双引号定义
  • 三引号定义:支持大字段字符串文本的编写
  • s插值表达式:字符串拼接 除了拼接之外还支持表达式
    在这里插入图片描述
    在这里插入图片描述

四、数据类型

基础类型类型说明
Byte8位带符号整数
Short16位带符号整数
Int32位带符号整数
Long64位带符号整数
Char16位无符号Unicode字符
StringChar类型的序列(字符串)
Float32位单精度浮点数
Double64位双精度浮点数
Booleantrue或false

Scala数据类型

  • 和Java支持类型一样
  • scala中数据类型,首字母大写
  • scala中,所有的数据类型本质都是对象
java中原生类型和包装类 包装类才是对象
int Integer

在scala中,所有的运算操作本质都是基于对象的方法调用
在这里插入图片描述在这里插入图片描述

五、条件表达式

块表达式、if条件表达式

  • 如果代码块只有一行代码 可以省略{}不写
  • 代码块中最后一个表达式的结果就是整个代码块返回的结果

在这里插入图片描述
在这里插入图片描述

六、循环

Scala循环
为什么编程语言需要循环语法支持?

数组集合和一些表达式 返回的结果是多个的集合 当需要操作当中的每一个元素的时候 需要循环遍历

1.for循环

语法:

for(i<-表达式/数组/集合){
//表达式
}

在这里插入图片描述

守卫条件for循环出来的内容,必须满足条件才能执行后面的逻辑 否则过滤掉
语法:

for(i<-表达式/数组/集合 if 条件 ){
表达式}

在这里插入图片描述
for推导式
语法:for yield 表达式
功能:对for循环出来的内容 使用yield后面表达式进行计算 结果组成一个新的集合返回
在这里插入图片描述

2.break和continue

break和continue
功能:

  • break 跳出整个循环 结束
  • continue 跳出本次循环 继续下一次
  • scala语法中,没有这两个关键字,scala提供了一个Breaks类 使用间接方式模拟实现相同的效果,需要自己手动导包

在这里插入图片描述

七、方法

1.Scala方法

语法:

def 方法名(名称1:类型,名称2:类型2):返回类型={
//方法体
}

在这里插入图片描述

注意

  • 识别方法的关键字眼def
  • 方法的返回类型可以不写,递归方法除外
  • 如果方法体只有一行代码,可以省略不写{}

在这里插入图片描述在这里插入图片描述

2.方法参数

默认参数
定义方法时给定默认值
在这里插入图片描述

带名参数
指定参数的名字调用
在这里插入图片描述
变长参数

格式:

def 方法名(参数名:参数类型*):返回类型={方法体}

在这里插入图片描述

3.方法调用

方法的调用形式
后缀调用法
格式:对象.方法(参数)

在这里插入图片描述

中缀调用法
格式:对象 方法 参数

在这里插入图片描述

花括号调用 大括号:当方法的参数只有一个的时候,可以在调用的时候使用花括号

在这里插入图片描述

无括号调用形式

在这里插入图片描述

八、函数

Scala中的函数
定义格式

//匿名函数
(参数1:类型,参数2:类型)=>{
//函数体
}
//给函数给个名字
val f1=(参数1:类型,参数2:类型)=>{
//函数体
}

在这里插入图片描述
注意事项

  • 识别函数关键字眼 =>
  • 在函数编程语言中,函数是头等公民
  • 函数的本质都是对象,都是FunctionN的实例,其中N表示的是函数输入参数的个数。
  • 既然函数是对象,就连可以把函数当作Int,String一样来使用 ,作为参数传递给方法
  • 方法可以转化成函数,_

在这里插入图片描述在这里插入图片描述

九、集合、数组

  • 所有集合和数组都分为两大类
  • 可变的 mutable
  • 不可变的 immutable

默认的情况下,操作都是不可变的,如何需要可变,需要自己手动导包
变指的是什么?

  • 有的指的是集合元素不能变
  • 有的指的是集合元素不能更新
  • 有的指的是上述两种情况合成:个数不能变 内容不能更新

有的初始值的情况下,一般不需要new对象,可以直接构建,底层调用apply方法

定长数组Array

在这里插入图片描述在这里插入图片描述

变长数组 ArrayBuffer

  • 使用前需要导包
    在这里插入图片描述在这里插入图片描述

十、Map映射

在Scala中Map分为两类
可变的Map,不可变的Map
如何区分是什么类型的Map,看你有没有导包,默认都是不可变的

变指的是什么?

  • 长度不可变 元素也不可以修改

语法

val/var map = Map(键->值, 键->值, 键->值...) 
val/var map = Map((键, 值), (键, 值), (键, 值), (键, 值)...)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

十一、Tuple元组

定义:使用不同()把不同的数据类型聚集起来就是元组

  • 通俗解释:不同数据类型的集合
  • scala内置了22个Tuple对象,满足从1个元素到22个元素的需求
  • 如果tuple只有两个元素,叫做对偶元组
    在这里插入图片描述在这里插入图片描述

十二、List列表

Scala中的列表分为两类

  • 不可变的 List
  • 可变的 ListBuffe
  • 默认情况下,操作都是不可变的,如果需要可变,需要自己手动导包

在这里插入图片描述

特殊
注意方向

和原有的集合组成一个新的集合返回  原来保持不变
:+  在集合尾部添加元素
+:  在集合头部添加元素
::  在集合头部添加元素

在这里插入图片描述在这里插入图片描述

十三、set列表

set和list

  • set集合无序 元素不重复
  • list集合有序 元素可以重复
  • Set也分为可变Set,不可变Set 区别在于是否导包
  • 在实际开发中,使用set的大多数需求都是对结果进行去重
    在这里插入图片描述在这里插入图片描述

十四、迭代器iterator

Scala集合迭代器

  • 针对我们的集合,Scala提供了迭代器便于迭代集合元素
  • 通常针对while循环使用
  • 注意iterator遍历完毕之后 里面的元素就为空,如果需要再次遍历 需要重新获得新得迭代器

在这里插入图片描述

以上是关于Scala:基础知识01的主要内容,如果未能解决你的问题,请参考以下文章

Spark MLlib速成宝典基础篇01Windows下spark开发环境搭建(Scala版)

01 Scala基础

scala学习01-scala基础语法

Scala基础学习01

Scala基础篇-01变量,数据类型

pyspark对应的scala代码PythonRDD对象