Scala基础

Scala基础

目录

  1. 什么是Scala
  2. 安装Scala
  3. Scala基础
  4. 集合
  5. 类与对象
  6. 抽象类和特质

什么是Scala

Scala是一种将面向对象和函数式编程结合在一起的高级语言,旨在以简洁、优雅和类型安全的方式表达通用编程模式。Scala功能强大,不仅可以编写简单脚本,还可以构建大型系统。

Scala运行于Java平台,Scala程序会通过JVM被编译成class字节码文件,然后在操作系统上运行。其运行时候的性能通常与Java程序不分上下,并且Scala代码可以调用Java方法、继承Java类、实现Java接口等,几乎所有Scala代码都大量使用了Java类库。

由于Spark主要是由Scala语言编写的,为了后续更好的学习Spark以及使用Scala编写Spark应用程序,需要首先学习使用Scala语言。

安装Scala

由于Scala运行于Java平台,因此安装Scala之前需要确保系统安装了JDK。此处使用的Scala版本为2.12.7,要求JDK版本为1.8。

Windows安装Scala

  1. 下载Scala
    到Scala官网 https://www.scala-lang.org/download/ 下载Windows安装包scala-2.12.7.msi

  2. 配置环境变量

    • 变量名:SCALA_HOME
    • 变量值:C:\Program Files (x86)\scala
    • 变量名:Path
    • 变量值:%SCALA_HOME%\bin
  3. 测试
    在CMD中执行 scala -version 命令

CentOS7安装Scala

  1. 下载Scala
    到Scala官网 https://www.scala-lang.org/download/ 下载Linux安装包scala-2.12.7.tgz
    解压到指定目录:

    $ tar -zxvf scala-2.12.7.tgz -C /opt/modules/
    
  2. 配置环境变量

    export SCALA_HOME=/opt/modules/scala-2.12.7/
    export PATH=$PATH:$SCALA_HOME/bin
    
  3. 测试
    在CMD中执行 scala -version 命令

Scala基础

最初学习Scala的时候建议在Scala命令行模式中操作,最终程序的编写可以在IDE中进行。在Windows CMD窗口中或CentOS的Shell命令中执行 scala 命令,即可进入Scala的命令行操作模式。

变量声明

Scala中变量的声明使用关键字valvar

声明一个val字符串变量str

scala> val str="hello scala"

str: String = hello scala

声明变量时指定数据类型:

scala> val str:String="hello scala"

str: String = hello scala

将多个变量放在一起进行声明:

scala> val x,y="hello scala"

x: String = hello scala
y: String = hello scala

变量声明注意事项

  • 定义变量需要初始化,否则会报错。
  • 定义变量时可以不指定数据类型,系统会根据初始化值推断变量的类型。
  • Scala中鼓励优先使用val(常量),除非确实需要对其进行修改。
  • Scala语句不需要写结束符,除非同一行代码使用多条语句时才需要使用分号隔开。

数据类型

在Scala中,所有的值都有一个类型,包括数值和函数。

Any类型

Any是Scala类层次结构的根,也被称为超类或顶级类。Scala执行环境中的每个类都直接或间接地从该类继承。该类中定义了一些通用的方法,例如equals()hashCode()toString()

AnyVal类型

AnyVal表示值类型。有9种预定义的值类型,它们是非空的DoubleFloatLongIntShortByteCharUnitBoolean

AnyRef类型

AnyRef表示引用类型。所有非值类型都被定义为引用类型。Scala中的每个用户定义类型都是AnyRef的子类型。AnyRef对应于Java中的Java.lang.Object

Nothing类型

Nothing是所有类型的子类,在Scala类层级的最低端。Nothing没有对象,因此没有具体值,但是可以用来定义一个空类型,类似于Java中的标示性接口。

Null类型

Null是所有引用类型(AnyRef)的子类,所以Null可以赋值给所有的引用类型,但不能赋值给值类型。

表达式

Scala中常用的表达式主要有条件表达式和块表达式。

条件表达式

条件表达式主要是含有if/else的语句块:

scala> val i=1
i: Int = 1

scala> val result=if(i>0) 100 else -100
result: Int = 100

块表达式

块表达式为包含在{}中的语句块:

scala> val result={
  | val a=10
  | val b=10
  | a+b
  |}
result: Int = 20

Scala中的返回值是最后一条语句的执行结果。

循环

Scala中的循环主要有for循环、while循环和do while循环三种。

for循环

scala> for(i<- 1 to 5) println(i)

while循环

scala> var i=1
i: Int = 1

scala> while(i<5){
  |  i=i+1
  |  println(i)
  | }

do while循环

scala> do{
  |    i=i+1
  |    println(i)
  | }while(i<5)

方法与函数

Scala中有方法与函数。Scala 方法是类或对象中定义的成员,而函数是一个对象,可以将函数赋值给一个变量。

方法定义

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

函数定义

(参数列表) => 函数体

集合

Scala集合分为可变集合和不可变集合。

数组

val arr=Array(1,2,3)

List

val nums: List[Int] = List(1, 2, 3, 4)

Map映射

val mp = Map(
  "key1" -> "value1",
  "key2" -> "value2"
)

元组

val t=(1,"scala",2.6)

Set

val set = Set(1,2,3)

类和对象

类的定义

class User{
  private var age=20
  def count(){
    age+=1
  }
}

单例对象

object Person{
  private var name="zhangsan"
  private var age=20
  def showInfo():Unit={
    println("姓名:"+name+",年龄:"+age)
  }
}

伴生对象

class Person() {
  private var name="zhangsan"
  def showInfo(){
    println("年龄:"+Person.age) //访问伴生对象的私有成员
  }
}

object Person{
  private var age=20
  def main(args: Array[String]): Unit = {
    var per=new Person()
    println("姓名:"+per.name) //访问伴生类的私有成员
    per.showInfo()
  }
}

get和set方法

class Person {
  private var privateName="zhangsan"
  def name=privateName //定义get方法
  def name_=(name:String): Unit ={
    this.privateName=name
  }
}

构造器

class Person(val name:String,var age:Int=18) {
  // ...
}

抽象类

abstract class Person {
  var name:String //抽象字段
  var age:Int
  def speak() //抽象方法
}

特质

trait Pet {
  var name:String //抽象字段
  var age:Int
  def run //抽象方法
}
  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值