大数据—— Scala 知识点整理

本文深入探讨Scala编程语言,涵盖其优点、闭包、柯里化、与Java的异同、模式匹配、case class与普通class的区别、隐式操作、偏函数和偏应用函数,以及元组、trait与abstract class的对比和ArrayBuffer与Array的差异。文章揭示了Scala在函数式编程、大数据处理中的核心地位及其对开发者效率的提升。

目录

 

1. Scala 语言的优点

2. Scala 中的闭包

3. Scala 中的柯里化

4. Java 和 Scala 的联系和区别

5. Scala 中的模式匹配

6. case class 和 class 的区别

7. 谈谈 Scala 中的隐式操作

8. Scala 中的偏函数和偏应用函数

9. Scala 中的元组

10. trait(特质)和 abstract class(抽象类)的区别

11. ArrayBuffer 和 Array 的区别


1. Scala 语言的优点

  • Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性
  • Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序
  • Scala 源代码被变编译成 Java 字节码,所以它可以运行于 JVM之上,并可以调用现有的 Java 类库
  • 作为流行的开源大数据内存计算引擎 Spark 的源码编程语言,Spark 有着良好的性能优势
  • Scala 将成为未来大数据处理的主流语言

2. Scala 中的闭包

        定义:可以在任何作用域内定义函数、包、类甚至是另一个函数或方法。在函数体内,可以访问到相应作用域内地任何变量。(重点)函数可以在变量不再处于作用域内时被调用。

object Test {
 
  /**
    * scala中的闭包
    * 函数在变量不处于其有效作用域内,还能够对变量进行访问
    *
    * @param args
    */
 
  def main(args: Array[String]): Unit = {
 
    def getHelloFunc(msg:String) = (name:String) => println(msg + "," + name)
 
    val sayHello = getHelloFunc("hello") // 传入msg的值 ,后面sayHello依然可以访问到
    val sayHi = getHelloFunc("hi")
 
    // 两次条用getHelloFunc,传入不同的msg,创建不同的函数返回
    // 然而msg只是一个局部变量,
    // 在getHelloFunc调用后,还继续存在创建的函数中,当sayHello("yxj")调用时,值为hello的msg保留在了函数内部,可以反复使用
    // 这种变量超出了其作用域,还可以使用的情况,就是闭包
 
    // scala
 
    sayHello("yxj") // 打印 hello,yxj
    sayHi("yxj") // 打印 hi,yxj
 
  }
}

3. Scala 中的柯里化

        柯里化函数也叫多参数列表函数,本身就是指把接受多分参数的函数变化成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

        简单理解就是改变函数的形式,不改变函数的功能。用途:和隐式参数结合使用大大简化代码,但降低了代码的可读性

//该函数接受两个参数
def mul(x:Int,y:Int) = x*y

//该函数接受一个参数生成另外一个接受单个参数的函数
def mulOneAtTime(x:Int)(y:Int) = x*y

//也可以写成
def mulOneAtTime(x:Int) = (y:Int) => x * y

4. Java 和 Scala 的联系和区别

联系:

  • Scala 源于 Java,但又高于 Java,Scala 在 Java 的基础上增加了函数式编程,让开发人员可以通过函数式编程来开发程序
  • 由于 Scala 最终被编译为 .class 文件运行在 JVM 中,其实本质上还是 Java,所以在 Scala 和 Java 可以互调双方的 API

区别:

  • 变量的声明: 
    • 变量 var 常量 val,Scala 支持自动类型推测
    • Scala 更多的是采用常量而不是变量来解决问题,好处是可以减少多线程并发的安全问题,特别适合用于多并发分布式的场景
  • 函数的声明
    • 关键字 def,Scala 函数没有返回值用 Unit,相当于 Java 中的 void
    • Scala 支持函数式编程,可以使用高阶函数,函数在 Scala 中是一等公民
  • 基本类型
    •  Scala 是存粹的面向对象的编程语言,所以并没有真正意义上的基本类型,他的类型都是类
  • 静态
    • Java 中静态 static 是违背 Java 面向对象的编程思想和封装特性的
    • Scala
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky_Tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值