Scala,一门「特立独行」的语言!

本文探讨Scala这门独特的编程语言,它基于JVM,融合了面向对象和函数式编程特性。介绍了Scala的基本思想,如类型声明、控制结构、模式匹配和面向对象特性。特别强调了其函数是一等公民的特性,以及在数据结构如List和Array上的选择建议。同时提醒读者注意Scala的版本兼容问题和一些编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入门 Spark 的路上很难不接触 Scala 。 Scala 似乎是为 java 提供了很多『类似函数式编程』的语法糖,这里记录一下这个语言独特的地方分享给读者朋友们。


Elena Mozhvilo @ unsplash.com

参考资料主要有:

  • 曹洁 . Spark大数据分析技术(Scala版)[M]. 北京航空航天大学出版社, 2021. ISBN:9787512433854
  • 陈欢 , 林世飞 . Spark最佳实践[M]. 人民邮电出版社, 2016. ISBN:9787115422286

Scala 基本思想与注意事项

Sacla 即 Scalable Language ,正如其名,是一门可伸缩的编程语言:

  • 基于 java 的虚拟机( Scala 会被编译成 JVM 字节码)
  • 但是既可以当脚本使用,又可以构造大型系统
  • 是静态语言,但是可以像动态语言那样支持交互式编程
  • 面型对象:每一个值都是对象,每一次运算都是一次方法调用
  • 函数式编程:所有函数都是对象,函数是“一等公民”
  • Scala 中几乎一切都是表达式

scala 是解释器, scalac 是编译器;可以直接 scala test.scala ,也可以 scalac test.scala & scala test (先把源码编译为字节码,再把字节码放到虚拟机中解释运行)。还可用输入 scala 进入交换编程界面。

所以要注意的是,需要先安装 JDK ,并且设置好环境变量 JAVA_HOME 。此外,更加重要的是, Scala 小版本兼容:2.12.x2.13.x 这两者不兼容,2.12.102.12.11 才兼容。

最基本的语法示例

类型的声明、控制结构(for、模式匹配、case)
// 变量
val two: Int = 1 + 1

var one: Int = 1
var one: String = 'one'

// 函数
def addOne(x: Int): Int = x + 1

def add(x: Int, y: Int): Int = {
   
    x + y
}

// 部分控制结构
var filename = 
    if (!args.isEmpty) args(0)
    else "default.txt"

for (i <- 1 to 4)
    println("iteration " + i)

1 to 4[1,2,3,4] ,而 i until 4[1,2,3]

关于 for 还有一些奇技淫巧。

// 多个区间
for (a <- 1 to 2; b <- 1 to 2) {
   
    println("a: " + a + ", b: " + b)
}
// 结果
a: 1, b: 1
a: 1, b: 2
a: 2, b: 1
a: 2, b: 2

// 过滤器
val list1 = List(3, 5, 2, 1, 7)
for (x <- list1 if x % 2 == 1) print(" " + x)
// 3 5 1 7

关于模式匹配,则有更多奇技淫巧。这里我直接参考:scala中case的用法

// 一.简单匹配,值匹配:

val bools = List(true, false)
for (bool <- bools) {
   
    bool match {
   
        case true => println("heads")
        case false => println("tails")
        case _ => println("something other than heads or tails (yikes!)")
    }
}

import scala.util.Random
val randomInt = new Random()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值